Effective Java 04 - item 18 -
in Programming Language on Java
상속보다는 컴포지션을 사용하라
어떻게 보면 당연한 이야기이다.
상속은 자바에서 잘못 만들어진 기능이며 이를 통해 클래스를 확장해 나가는 것은 설계를 더 어렵게 만든다.
상속은 캡슐화를 깨뜨리는 주범이다.
상위 클래스에 의존적일 수 밖에 없기 때문에 상위 클래스가 바뀌면 하위 클래스의 동작에 문제가 생길 수 있다.
이러한 상속 구조를 피해갈 수 있는 묘안이 바로 컴포지션이다.
이 컴포지션은 기존 클래스가 새로운 클래스를 자신의 구성요소로 사용하는 설계기법을 의미한다.
컴포지션은 기존 클래스의 결함을 숨기는 새로운 API를 설계해볼 수 있지만, 상속은 상위 클래스의 API를 결함까지도 승계하기 떄문에 변경을 더 어렵게 만든다.
상속은 가급적 상위, 하위가 순수한 is-a
관계일 때만 사용하는 편이 좋다.
Reference
이펙티브 자바 Effective Java 3/E
조슈아 블로크