경주장

11장 합성과 유연한 설계 본문

기술서적/오브젝트

11장 합성과 유연한 설계

달리는치타 2021. 9. 5. 20:03

상속 관계는 is-a 관계라고 부르고 합성 관계는 has-a 관계라고 부른다.

처음 해당 용어를 들었을 때에는 헷갈리고 와닿지 않았는데 책을 읽다보니 조금 정리가 되는 듯 하다.

 

상속 관계는 1대1로 발생하며 부모와 자식의 관계가 strict하게 딱 정해지는 효과가 있어 "is-a"와 같은 단정적인 표현이 어울리고

합성 관계는 1대 다로 발생하며 표현 자체도 딱 composite하게 인자로서 "has a"하는 느낌이 나는 듯 하다. 그리고 "has a" 는 "is a"보다는 아무래도 더 유연한 느낌이 든다.

 

상속 - 클래스 사이의 정적인 관계

합성 - 객체 사이의 동적인 관계 - 즉, 런타임에 동적으로 변경 할 수 있다.

 

상속을 합성으로 바꾸면 상속이 초래하는 세 가지 문제점을 해결 할 수 있다.

 

상속에서의 Vector와 Stack의 관계 - "나는 Vector의 기능을 확장해서 Stack을 만들거야"

합성에서의 Vector와 Stack의 관계 - "나는 Vector의 기능을 일부만 활용하는 방식으로 Stack을 만들거야"

 

위와 같은 경우

합성관계가 더 적절한 구현 방식이라는 것을 알 수 있다.

 

 

상속관계에서의 클래스 폭발 문제 해결

 

믹스인 - 추상 서브 클래스