상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임
에 해결
합성은 두 객체 사이의 의존성을 런타임
에 해결
상속과 합성은 코드 재사용
이라는 동일한 목적을 가진다.
앞장에서 살펴본 것처럼 상속은 부모 클래스의 내부 구현을 상세히 알아야 하기 때문에 결합도가 높아지고 이 때문에 좋은 방법이라고 할 수 없다.
합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다. → 합성을 이용해 포함한 객체 내부 구현이 변경되더라도 영향을 최소화 할 수 있음. → 변경에 더 안정적인 코드를 얻을 수 있음.
상속은 부모 클래스 안에 구현된 코드 자체를 재사용하지만 합성은 객체의 퍼블릭 인터페이스를 재사용한다. → 상속 대신 합성을 사용하면 구현에 대한 의존성을 인터페이스에 대한 의존성으로 변경할 수 있다. → 높은 결합도에서 낮은 결합도로 변경됨
코드 중복이 생기니까 재사용을 위해 상속을 써보자 → 자연스러운 생각
상속으로 하려다보니 요구사항에 따라 자식 클래스를 조합별로 만들어야한다. → 클래스 폭발!