안녕하세요 남갯입니다.
오늘은 이펙티브자바 item 20에 대해 포스팅 해보려고 합니다.
아이템 20. 추상 클래스보다는 인터페이스를 우선하라.
인터페이스와 추상클래스는 자바 8부터 default 키워드를 통해 default 메소드를 제공 할 수 있게 되어서 거의 비슷합니다. 둘의 가장 차이를 알아봅시다.
- 추상클래스(Abstract)
추상클래스가 정의한 타입을 구현하는 클래스는 추상클래스의 하위 타입이 되어야한다. 새로운 타입을 정의할때 제약을 안게 되는셈이고,
- 인터페이스(implements)
인터페이스가 선언한 메서드를 모두 정의하고 일반적 규약을 잘 치킨 클래스면 어떤 클래스를 상속해도 같은 타입으로 이용된다.
인터페이스는 기존 클래스에도 손 쉽게 인터페이스를 구현할 수 있다. implements 구문을 사용하고 인터페이스가 요구하는 메서드를 추가하면 된다.
- 인터페이스의 장점
1. 인터페이스는 믹스인 정의에 안성맞춤.
믹스인이란? 기존에 클래스의 주된 타입 외에 특정 선택정 행위를 제공하는것
예를들어 Compareable은 자신을 구현한 클래스들의 순서를 정할 수 있다고 선언하는 인터페이스이다.
2. 계층구조가 없는 타입 프레임워크를 만들 수 있다.
public interface Singer{
AudioClip sing(Song s);
}
public interface Songwriter {
Song compose(int charPosition);
}
public interface SingerSongwriter extends Singer, Songwriter {
AudioClip strum();
void actSensitive();
위와 같은 인터페이스가 결정적인 도움을 줄 수 있다.
추상클래스로 만들게 된다면 고도비만 계층구조가 생겨나고 속성이 n개라면 지원해야할 조합의 수는 2^n개나 존재하게 된다. (조합 폭발현상)
래퍼클래스 관용구(구성) 을 이용하면 인터페이스는 기능을 향상시키는 안전하고 강력한 수단 된다.
- 템플릿메서드패턴
인터페이스와 추 골격 구현 클래스를 함께 제공하면서 인터페이스와 추상 클래스의 장점을 취하는 방법
2019/06/05 - [IT/개발스터디 디자인패턴] - [디자인패턴] 템플릿 메소드 패턴
'책 > 이펙티브자바 3E' 카테고리의 다른 글
[Effective Java] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. (0) | 2020.01.14 |
---|---|
[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 (0) | 2020.01.06 |
[Effective Java] 아이템 43. 람다보다는 메소드 참조를 이용하라. (0) | 2020.01.02 |
[Effective Java] 아이템 42. 익명클래스 보다는 람다를 사용하라. (0) | 2019.12.31 |
[Effective Java] 아이템 7. 다 쓴 객체 참조를 해제하라. (0) | 2019.12.30 |