상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임에 해결되지만 합성에서 두 객체 사이의 의존성은 런타임에 해결된다. 상속 관계는 is-a관계라고 부르고 합성 관계는 has-a관계라고 부른다.

1. 상속을 합성으로 변경하기

앞선 말한 상속의 3가지 문제점을 합성으로 변경해서 해결해 보자

  1. 불필요한 인터페이스 상속 문제
    1. 불필요한 부모객체의 오퍼레이션들이 포함되지 않는다.
  2. 메서드 오버라이딩의 오작용 문제
    1. 오버라이딩이 필요한 메서드만 오버라이딩해서 쓰고 다른것은 구현하면 된다.(포워딩 메서드)
  3. 부모 클래스와 자식 클래스의 동시 수정 문제
    1. 모든 경우에 해결되지는 않지만 그래도 구현에 대한 결합보다는 인터페이스에 대한 결합이 좋다.

2. 상속으로 인한 조합의 폭발적인 증가

자바에서는 단일 상속만 지원하기 때문에 조합의 갯수만큼 클래스가 증가한다.

3. 믹스인

Decorator Pattern