상속은 강력하지만 캡슐화를 해친다는 문제가 있다. 상속은 상위 클래스와 하위 클래스가 순수한 is-a 관계일 때만 써야한다. is-a 관계일 때도 안심할 수만은 없는 게, 하위 클래스의 패키지가 상위 클래스와 다르고, 상위 클래스가 확장을 고려해 설계되지 않았다면 여전히 문제가 될 수 있다. 상속의 취약점을 피하려면 상속 대신 컴포지션과 전달을 사용하자. 특히 래퍼클래스로 구현할 적당한 인터 페이스가 있다면 더욱 그렇다. 래퍼 클래스는 하위 클래스보다 견고하고 강력하다.
상위 클래스가 확장할 목적으로 설계 되었고, 문서화도 잘 된 클래스라면 안전하다.
-
상속할 클래스의 API에 결함이 없는가?
-
결함이 있다면, 자식 클래스의 API까지 전파돼도 괜찮은가?
is-a 관계라 할지라도 문서화되지 않았거나, 확장할 목적으로 설계된 클래스가 아니라면, 컴포지패턴, 데코레이터 패턴을 사용하는게 좋을 것 같다.