Skip to content

Latest commit

 

History

History
 
 

item18

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

상속보다는 컴포지션을 사용하라. (클래스가 클래스를 상속하는 경우)


요약

상속은 강력하지만 캡슐화를 해친다는 문제가 있다. 상속은 상위 클래스와 하위 클래스가 순수한 is-a 관계일 때만 써야한다. is-a 관계일 때도 안심할 수만은 없는 게, 하위 클래스의 패키지가 상위 클래스와 다르고, 상위 클래스가 확장을 고려해 설계되지 않았다면 여전히 문제가 될 수 있다. 상속의 취약점을 피하려면 상속 대신 컴포지션과 전달을 사용하자. 특히 래퍼클래스로 구현할 적당한 인터 페이스가 있다면 더욱 그렇다. 래퍼 클래스는 하위 클래스보다 견고하고 강력하다.

상위 클래스가 확장할 목적으로 설계 되었고, 문서화도 잘 된 클래스라면 안전하다.


상속하기로 결정하기 전에 생각해봐야 할 점

  1. 상속할 클래스의 API에 결함이 없는가?

  2. 결함이 있다면, 자식 클래스의 API까지 전파돼도 괜찮은가?

정리

is-a 관계라 할지라도 문서화되지 않았거나, 확장할 목적으로 설계된 클래스가 아니라면, 컴포지패턴, 데코레이터 패턴을 사용하는게 좋을 것 같다.