상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임에 해결되지만 합성에서 두 객체 사이의 의존성은 런타임에 해결된다. 상속 관계는 is-a관계라고 부르고 합성 관계는 has-a관계라고 부른다.
1. 상속을 합성으로 변경하기
앞선 말한 상속의 3가지 문제점을 합성으로 변경해서 해결해 보자
- 불필요한 인터페이스 상속 문제
- 불필요한 부모객체의 오퍼레이션들이 포함되지 않는다.
- 메서드 오버라이딩의 오작용 문제
- 오버라이딩이 필요한 메서드만 오버라이딩해서 쓰고 다른것은 구현하면 된다.(포워딩 메서드)
- 부모 클래스와 자식 클래스의 동시 수정 문제
- 모든 경우에 해결되지는 않지만 그래도 구현에 대한 결합보다는 인터페이스에 대한 결합이 좋다.
2. 상속으로 인한 조합의 폭발적인 증가
자바에서는 단일 상속만 지원하기 때문에 조합의 갯수만큼 클래스가 증가한다.
3. 믹스인
Decorator Pattern