본문 바로가기

IT/이펙티브자바 3E

[Effective Java] 아이템 20. 추상클래스보다는 인터페이스를 우선하라.

안녕하세요 남갯입니다.


오늘은 이펙티브자바 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/개발스터디 디자인패턴] - [디자인패턴] 템플릿 메소드 패턴