◆ 인터페이스란?
- 개발자의 코드와 객체가 통신하는 접점
- 객체 사용 설명서 (여러 객체가 사용가능)
◆ 인터페이스의 구성멤버
- 인터페이스의 모든 멤버는 public 이다!!!
1. static fiinal 상수
- 선언과 동시에 초기값 지정 (static initializer 작성 불가!)
- 선언된 필드는 모두 'public static final'로 컴파일
(하지만 컴파일러가 대신 넣어준다고 해서 생략하지 않도록 하자!!)
2. 추상메소드(★규격★)
- 실행블록(구현부)이 없는 메소드
- 모든 추상메소드는 'public abstract'로 컴파일
- 추상메소드는 규격이자 자식타입(구현 클래스)에서
반드시 재정의해야하는 강제성을 부여하는 수단
3. 디폴트메소드
- 모든 구현 객체가 가지고 있는 기본 메소드 사용
- 구현 객체가 인터페이스에 대입되어야 호출할 수 있는 인스턴스 메소드 (-> 자식타입의 객체 소속)
- 모든 디폴트메소드는 'public default' 키워드를 반드시 붙여야 한다!!
(public 은 생략되도 컴파일 과정에서 자동 생성)
- 기능의 확장을 위해 자바 8부터 추가
※ 기능 확장을 하려면 모든 구현클래스에 새롭게 정의된 추상메소드를 모두 구현해야한다.
때문에 구현클래스를 건드리지 않고도 기능을 확장하기 위해 인터페이스의 멤버로 추가!!!
But, 디폴트 메소드가 오버라이딩 되어있는 경우, 인터페이스에 있는 디폴트메소드가 수정되었을 때
컴파일 오류가 발생하기 때문에 인터페이스다운 기능이 아니라고 볼 수 있다!!!
현업에서는 지양!!
4. 정적 메소드
- 모든 객체가 공유하는 메소드
- 인터페이스로 바로 호출 가능(정적메소드 -> 인터페이스의 클래쯔객체 소속)
- 강제성을 구현하지 않고, 구현클래스에서 필요에 따라 사용가능한 기능을 확장
- 모든 정적 메소드는 'public static' 키워드를 가짐.
인터페이스의 구성멤버에 대한 코드는 아래를 참고하면 된다!
◆ 인터페이스의 사용목적
- 구현 객체의 같은 동작을 보장하기 위함(추상메소드를 통한 규격화)
- 개발코드가 객체에 종속되지 않도록 하여 객체를 교체할 수 있도록 하기 위함
- 개발 코드 변경 없이 어떤 객체가 사용하느냐에 따라 리턴값 또는 실행 내용이 다양 (다형성)
◆ 구현 객체와 구현 클래스
- 구현 객체 : 인터페이스의 추상메소드에 대한 실체 메소드를 가진 객체
- 구현 클래스 : 구현 객체를 생성하는 클래스
※ 인터페이스의 일부만 재정의하는 경우 추상클래스로 선언
◆ 인터페이스의 다중상속
인터페이스는 추상클래스와 달리 다중상속이 가능하다!!
방법1.
여러 인터페이스를 상속받는 인터페이스를 implement 하여 여러 인터페이스의 추상메소드를 구현
(인터페이스 간 상속에 대해서는 extends 키워드를 사용한다!!)
방법2.
각각의 인터페이스를 implements 받아여러 인터페이스의 추상메소드를 구현