인터페이스는 일종의 추상 클래스이다.
하지만 더 추상화된 개념이여서 인터페이스는 추상 메서드 선언만 가능하며, 인스턴스 변수를 가질 수 없다라는 점
저번에 추상 클래스는 '미완성 설계도'라고 칭하자면, 인터페이스는 아에 '기본 설계도'의 개념인 것이다.
1. 인터페이스 작성
인터페이스를 작성하는 것은 기존 클래스를 작성하는 방법과 같은데 다만 키워드로 interface를 사용한다.
그리고 interface도 접근 제어자로 public, default를 사용할 수 있다.
또한, 내부 필드에서 규칙이 있는데, 아래와 같다.
- 모든 멤버 변수는 public static final 이어야 한다.
- 모든 메서드는 public abstract 이어야 한다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름 (매개변수목록);
}
모든 멤버 변수와 메서드가 저런 규칙이 있어서 생략하고 작성해도 컴파일러가 자동으로 작성한다.
아에 밑의 코드처럼 접근 제어자 등이 생략 가능하다는 점.
interface 인터페이스이름 {
// public static final 제어자 생략
타입 상수이름 = 값;
// public abstract 제어자 생략
메서드이름 (매개변수목록);
}
또한, 인터페이스도 상속을 받을 수 있다.
즉, 서브 인터페이스를 만들 수 있다는 것이며, 다중 상속도 가능하다.
클래스 상속은 확장한다는 의미의 extends 키워드를 사용하고, 인터페이스는 구현한다는 의미의 implements를 사용한다.
interface 부모인터페이스1 {
// 부모인터페이스1에 정의된 추상메서드
}
interface 부모인터페이스2 {
// 부모인터페이스2에 정의된 추상메서드
}
interface 인터페이스 impliments 부모인터페이스1, 부모인터페이스2 { }
조금 더 구체적으로는 구현된 메서드가 있는 클래스도 상속 가능하다.
그래서 extends (클래스), impliments (인터페이스1, 인터페이스2)가 동시에 존재할 수 있다.
헷갈릴 수 있는데 자바는 클래스를 두 가지 이상 상속받는 것은 되지 않는다.
그리고 클래스에 다중 구현도 가능하다는 점
2. 인터페이스 정리
- 내부의 모든 메서드는 public abstract (default 메소드 제외)
- 내부의 모든 필드는 public static final 상수
- 추상 메서드를 가지고 있어야 한다.
- 인스턴스 불가능(new 생성자 X)
- 인터페이스, 추상클래스를 구현, 상속한 클래스는 추상 메서드를 반드시 구현해야 한다.
- 클래스에 다중 구현 지원
- 인터페이스끼리는 다중 상속 지원
인터페이스는 부모 자식 관계인 상속에 얽매이지 않고, 공통 기능이 필요할 때마다 추상 메서드를 정의해놓고 구현
(implement)하는 식으로 추상클래스보다 자유롭게 탈부착식 사용이 가능하다.