저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다.
각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다.
그렇다면 다시 제목을 봐보자..
항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 때는 객체 합성을 사용하자.
이 말은, 특정 객체를 상속해야지만 만들수 있는 객체가 public 상속을 할수 없다면, 객체 합성으로 만들자. 라고 이해해도 무리는 없을 것이다.
그렇다면 "has-a(...는...를가짐)" 객체 합성 과 "is-implemented-in-terms-of(...는...를 써서 구현됨)"의 차이점은 무엇일까?
"has-a(...는...를가짐)"은 사람, 주소, 전화번호 등 데이터로써 가치가 있는 객체 합성을 뜻하며
"is-implemented-in-terms-of(...는...를 써서 구현됨)"은 사람을 찾는 방법, 주소를 찾는 방법, 전화번호를 찾는 방법 등, 무엇인가를 위한 알고리즘으로써 가치가 있는 객체 합성을 뜻한다.
.. 역시 말로만 하면 이해가 안가니, 소스코드로 포함을 하려 한다.
크게 각각의 차이를 아는것도 도움이 되겠지만, 이번 항목에서는 두 패턴의 차이를 중점으로 이야기 한것이 아니다. 이번 항목에선,특정 객체를 구현함에 있어, public 상속이 모순이 된다면, 객체 합성이 더 좋은 선택이라고 말하는 것이다.
착각을 정리
"is-implemented-in-terms-of(...는...를 써서 구현됨)" 상속(.. 합성이겠지)은 설계 패턴이다.
private: 상속은 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 상속 을 뜻한다!
그렇다고 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 패턴이 private: 상속은 아니다!
관련링크
http://ikpil.tistory.com/341
http://evax.springnote.com/pages/871732
http://yatoyato.tistory.com/1105
http://www.winapi.co.kr/clec/cpp3/29-4-2.htm
http://swblog.net/STEP-9-상속구현-2-More-inheritance
http://www.xevious7.com/49
각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다.
그렇다면 다시 제목을 봐보자..
항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 때는 객체 합성을 사용하자.
이 말은, 특정 객체를 상속해야지만 만들수 있는 객체가 public 상속을 할수 없다면, 객체 합성으로 만들자. 라고 이해해도 무리는 없을 것이다.
그렇다면 "has-a(...는...를가짐)" 객체 합성 과 "is-implemented-in-terms-of(...는...를 써서 구현됨)"의 차이점은 무엇일까?
"has-a(...는...를가짐)"은 사람, 주소, 전화번호 등 데이터로써 가치가 있는 객체 합성을 뜻하며
"is-implemented-in-terms-of(...는...를 써서 구현됨)"은 사람을 찾는 방법, 주소를 찾는 방법, 전화번호를 찾는 방법 등, 무엇인가를 위한 알고리즘으로써 가치가 있는 객체 합성을 뜻한다.
.. 역시 말로만 하면 이해가 안가니, 소스코드로 포함을 하려 한다.
크게 각각의 차이를 아는것도 도움이 되겠지만, 이번 항목에서는 두 패턴의 차이를 중점으로 이야기 한것이 아니다. 이번 항목에선,특정 객체를 구현함에 있어, public 상속이 모순이 된다면, 객체 합성이 더 좋은 선택이라고 말하는 것이다.
착각을 정리
"is-implemented-in-terms-of(...는...를 써서 구현됨)" 상속(.. 합성이겠지)은 설계 패턴이다.
private: 상속은 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 상속 을 뜻한다!
그렇다고 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 패턴이 private: 상속은 아니다!
관련링크
http://ikpil.tistory.com/341
http://evax.springnote.com/pages/871732
http://yatoyato.tistory.com/1105
http://www.winapi.co.kr/clec/cpp3/29-4-2.htm
http://swblog.net/STEP-9-상속구현-2-More-inheritance
http://www.xevious7.com/49
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 43: 템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자. (2) | 2008.07.28 |
---|---|
항목 42: typename의 두가지 의미를 제대로 파악하자. (12) | 2008.07.25 |
항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터 (0) | 2008.07.25 |
항목 40: 다중 상속은 심사숙고해서 사용하자. (0) | 2008.07.25 |
항목 39 : private 상속은 심사숙고해서 구사하자 (0) | 2008.07.19 |
항목 37: 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의 하지 말자. (0) | 2008.07.16 |
항목 36 : 상속받는 비가상 함수를 파생 클래스에서 재정의 하는 것은 절대 금물! (1) | 2008.07.14 |
항목 35: 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. (0) | 2008.07.14 |
항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자. (0) | 2008.07.09 |
항목 33: 상속된 이름을 숨기는 일은 피하자 (4) | 2008.07.02 |
최근댓글