아이템 18. 추상 클래스 대신 인터페이스를 사용하라.
18. 추상 클래스 대신 인터페이스를 사용하라.
- 인터페이스는 비 계층적인(nonhierarchical) 자료형 프레임워크(type framework)를 만들수 있도록 한다. ```java public interface Singer{ AudioClip sing(Song s); }
public interface Songwriter{ Song compose(boolean hit); }
위와 같이 가수(singer), 작곡가(songwriter)를 인터페이스로 표현했을 때,
작곡도 하면서 가수 활동도 하는 사람을 표현할때 아래와 같이 표현할 수 있다.
```java
public interface SingerSongwriter extends Singer, Songwriter{
AudoiClilp strum();
void actSensitive();
}
인터페이스를 활용한 확장은 위와 같이 매우 유연한 설계 방식을 가질수 있다.
- 인터페이스를 사용하면 포장 클래스 숙어(wrapper class idiom)을 통해(규칙 16참조) 안전하면서도 강력한 기능 개선이 가능하다.
규칙 18. 추상 클래스 대신 인터페이스를 사용하라. (127.p ~ 123.p)를 다시 한번 꼭 읽어 볼것!!!
새로운 인터페이스를 내놓을 때는, 인터페이스를 확정하기 전에 최대한 많은 프로그래머가 인터페이스를 다양한 방법으로 구현해 보도록 해야 한다. 그렇면 수정할 기회가 있을 때 결함을 발견 할 수 있다. public 인터페이스는 극도로 주의해서 설계해야 하며, 실제로 여러 구현을 만들어 보면서 광범위하게 테스틀 해야 한다.