아이템 20 - 추상 클래스보다 인터페이스를 우선하라.
JAVA ·인터페이스의 장점
- 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다.
- 기존 클래스도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다.
- 기존 클래스 위에 새로운 클래스를 끼워넣기는 어려운 게 일반적이다.
- 추상 클래스가 정의한 타입을 구현하는 클래스는
반드시 추상 클래스의 하위 클래스가 되어야 한다.
- 추상 클래스가 정의한 타입을 구현하는 클래스는
- 기존 클래스 위에 새로운 클래스를 끼워넣기는 어려운 게 일반적이다.
- 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다. (선택적인 기능 추가)
- 믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에
원래의 ‘주된 타입’외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 준다. - 추상 클래스는 믹스인을 정의할 수 없다.
- 기존 클래스에 덧씌울 수 없기 때문이다.
- 믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에
- 계층구조가 없는 타입 프레임워크를 만들 수 있다.
- 래퍼 클래스와 함께 사용하면 인터페이스는 기능을 향상 시키는 안전하고 강력한 수단이 된다.
- 타입을 추상 클래스로 정의해두면 그 타입에 기능을 추가하는 방법은 상속뿐이다.
- 상속해서 만든 클래스는 래퍼 클래스보다 활용도가 떨어지고 깨지기는 더 쉽다.
- 구현이 명백한 것은 인터페이스의 디폴트 메서드를 사용해 프로그래머의 일감을 덜어 줄 수 있다.
인터페이스와 추상 골격 클래스
- 인터페이스와 추상 클래스의 장점을 모두 취할 수 있다.
- 인터페이스 - ‘가능한 한’ 디폴트 메서드 구현
- 추상 골격 클래스 - 나머지 메서드 구현
- 템플릿 메서드 패턴
- 다중 상속을 시뮬레이트할 수 있다.
- 골격 구현은 상속용 클래스이기 때문에 아이템 19를 따라야 한다.