KoreanFoodie's Study

Effective C++ | 항목 38 : "has-a(...는...를 가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자 본문

Tutorials/C++ : Advanced

Effective C++ | 항목 38 : "has-a(...는...를 가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자

GoldGiver 2022. 10. 25. 16:29

C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다!

항목 38 : "has-a(...는...를 가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자

핵심 :

1. 객체 함성(composition)의 의미는 public 상속이 가진 의미와 완전히 다르다.
2. 응용 영역에서 객체 합성의 의미는 has-a(...는...를 가짐)이다. 구현 영역에서는 is-implemented-in-terms-of(...는 ...를 써서 구현됨)의 의미를 갖는다.


합성(composition) 이란, 어떤 타입의 객체들이 그와 다른 타입의 객체들을 포함하고 있을 경우에 성립하는 타입들 사이의 관계를 일컫는다. 예시를 보자.

class Address { ... };
class PhoneNumber { ... };

class Person
{
public:
	...
private:
	std::string name;
	Address address;
	PhoneNumber phoneNumber;
}

위의 Person 클래스는 Address 와 PhoneNumber 클래스를 가지고 있고, 구현 영역에서는 is-implemented-in-terms-of 의 의미를 갖는다.

Comments