상속과 합성은 코드 재사용 기법이다.
상속이 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용 하는 데 비해 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용한다.
상속에서 부모 클래스와 자식 클래스 사이의 의존서응ㄴ 컴파일 타임에 해결되지만, 합성에서 두 객체 사이의 의존성은 런타임에 해결된다.
상속 관계는 is-a관계, 합성은 has-a 관계다.
합성은 구현에 의존하지 않는다는 점에서 상속과 다르다. 합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다.
상속 관계는 클래스 사이의 정적인 관게인 데 비해 합성 관계는 객체 사이의 동적인 관계다.
코드 작성 시점에 결정한 상속 관계는 변경이 불가능하지만 합성 관게는 실행 시점에 동적으로 변경할 수 있기 때문이다.
객체 합성이 클래스 상속보다 더 좋은 방법이다.
상속은 화이트박스 재사용 이라고도 불리며, 상속을 받으면 부모 클래스의 내부가 자식 클래스에 공개되기 때문에 화이트 박인 셈이다.
합성하려면 합성할 객체들의 인터페이스를 명확하게 정의해야한다. 이를 블랙박스 재사용 이라고도 부르며, 객체의 내부는 공개되지 않고 인터페이스를 통해서만 재사용되기 때문이다.