인터페이스(interface)란?
- 일종의 추상클래스. 추상클래스(미완성 설계도)보다 추상화 정도가 높다.
- 실제 구현된 것이 전혀 없는 기본 설계도.(알맹이 없는 껍데기)
- 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다.
- 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다.(프로젝트를 나눠 진행도 가능)
- 'class'대신 'interface'를 사용한다는 것 외에는 클래스 작성과 동일하다.
- 인터페이스도 참조변수 선언이 가능하고, 메소드 오버라이딩 원칙 그대로 적용된다.
- 하지만, 구성요소(멤버)는 추상메서드와 상수만 가능하다.
interface 인터페이스이름 {
public static final 타입 변수이름
public abstract 리턴타입 메소드이름(매개변수)
}
모든 맴버변수는 public static final 이어야 하며, 생략 가능하다.
모든 메서드는 public abstract이며 생략 가능하다.
interface의 또 다른 가치
- 무엇인가를 표시하는(클래스의 특성을 표시하는) 용도로도 인터페이스는 사용된다.
- 이러한 경우, 인터페이스의 이름은 ~able로 끝나는 것이 보통이다.
- 이러한 경우, 인터페이스는 비어 있을 수도 있다.
- instanceof 연산자를 통해서 클래스의 특성을 파악할 수 있다.
- 인터페이스 UpperCasePrintable을 구현하는 클래스의 인스턴스가 print 메소드의 인자로 전달되면 문자열을 전부 대문자로 출력한다.
public static void print(Object obj) {
String org=obj.toString();
if(obj instanceof UpperCasePrintable) { //이런 식으로 빈 인터페이스를 사용하여 상속 받은 클래스와 아닌 클래스의 차이를 이용하여 구별이 가능하다.
org=org.toUpperCase(); }
System.out.println(org); }
인터페이스는 둘 이상을 동시에 구현가능하다.
- 클래스에서 인터페이스의 상속(구현)은 extends가 아닌 implements를 사용한다.
인터페이스간 상속도 가능하다.
- 단 이때는implements가 아닌 extends를 사용한다.