−컴포지션 자체는 has-a 구조다. 다형성은 interface, abstract class, trait, function pointer 같은 대체 가능한 계약에서 나온다. 실무에서 "상속보다 컴포지션"이라고 말할 때는 대개 둘을 합친 인터페이스 기반 컴포지션을 가리킨다.
왜 상속보다 컴포지션이라는 말이 나왔나
초기 객체지향에서는 상속이 매우 매력적이었다. 클래스 계층을 만들면 현실 세계 분류도 표현할 수 있고, 부모 클래스의 코드도 재사용할 수 있었다. Animal -> Dog, Vehicle -> Car, Order -> DiscountOrder 같은 구조는 처음에는 자연스럽게 보인다.
문제는 시간이 지나면서 반복적으로 드러났다.
+컴포지션 자체는 has-a 구조로 많이 표기된다.
객체지향에서 넓은 의미의 컴포지션은 한 객체가 다른 객체를 참조하거나 소유하거나 사용하며 협력하는 구조다.
좁은 의미의 UML composition은 강한 소유/생명주기 종속을 뜻하지만, 실무에서 “상속보다 컴포지션”이라고 말할 때는 대개 delegation, aggregation, dependency injection까지 넓게 포함한다.
다형성은 interface, abstract class, trait, function pointer 같은 대체 가능한 계약에서 나온다. 실무에서 "상속보다 컴포지션"이라고 말할 때는 대개 둘을 합친 인터페이스 기반 컴포지션을 가리킨다.
왜 상속보다 컴포지션이라는 말이 나오는가
초기 객체지향에서는 상속이 매우 매력적이었다. 클
래스 계층을 만들면 현실 세계 분류도 표현할 수 있고, 부모 클래스의 코드도 재사용할 수 있었다. Animal -> Dog, Vehicle -> Car, Order -> DiscountOrder 같은 구조는 처음에는 자연스럽게 보인다.
문제는 시간이 지나면서 여러 문제점이 자주 나타났다.