인터페이스는 객체의 사용방법을 정의한 타입이다.
객체의 교환성을 높여주기 때문에 다형성을 구현하는 매우 중요한 역할을 한다.
인터페이스의 역할
1. 개발 코드가 객체에 종속되지 않게 함 -> 객체 교체할 수 있도록 하는 역할
2. 개발 코드 변경 없이 리턴값 또는 실행 내용이 다양해 질 수 있음
인터페이스 선언
[public] interface 인터페이스명 { ... }
인터페이스의 구성 멤버
1. 상수 필드 - 모든 필드는 public static final이 자동적으로 붙는다 (안붙이면 컴파일러가 붙임), 선언과 동시에 초기화 해줘야 함
2. 추상 메소드 - public abstract가 자동으로 붙음
3. 디폴트 메소드 - 실행블록을 가지고 있는 메소드 (구현클래스에서 재정의하지 않아도 상관없음)
4. 정적 메소드
(인터페이스는 인스턴스 필드를 가질 수 없다!!!)
구현 클래스 선언
implement 키워드로 명시한다.
public class 구현클래스명 implements 인터페이스명 { ... }
익명 구현 객체
명시적인 구현 클래스 작성은 생략하고 바로 구현 객체를 얻는 방법
이름없는 구현 클래스 선언과 동시에 객체 생성
ex) new Thread(new Runnable (public void run() {...} )).start();