상속과 합성

‘Gof의 디자인 패턴’에서는 “Favor object composition over class inheritance”라고 말한다. 이를 해석하면 “객체 합성이 클래스 상속보다 더 나은 방법이다”라는 의미이다.

객체지향 시스템에서 기능의 재사용을 위한 가장 대표적인 두 가지 방법이 상속과 합성이다. 디자인 패턴에서는 상속을 통한 재사용을 ‘white-box reuse’라고 하고 합성을 통한 재사용을 ‘black-box reuse’라고 한다.

먼저, 상속에 대해 살펴보자. 우리가 어떤 객체를 상속하면 private으로 선언되지 않은 모든 변수와 메서드, 생성자가 하위클래스에 노출된다. 이렇게 하위클래스에서 수퍼클래스의 내부가 보인다는 의미로 디자인 패턴에서는 상속을 통한 재사용을 ‘white-box reuse’라고 말하는 것이다. 투명한 하얀 상자 안에 어떤 것이 들어있다면 우리는 밖에서 그것을 볼 수 있을 것이다.

상속의 장점은 오버라이딩을 통해 수퍼클래스의 구현을 손쉽게 재정의할