-
Effective C++...36일지 2022. 8. 7. 13:14
"has-a(...는 ...를 가짐)" 혹은 "is-implemented-in-terms-of(...는 ...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자
객체 합성이란
어떤 타입이 다른 타입의 객체를 포함할 때의 관계를 말하며 다음과 같은 예를 들 수 있다.
class Address { ... };
class PhoneNumber { ... };
class Person {
public:
...
private:
// 아래 객체들은 Person 클래스와 has-a 관계를 가진다.
std::string name;
Address address;
PhoneNumber voiceNumber;
PhoneNumber faxNumber;
};
※ 합성이란 용어 대신 레이어링, 포함, 통합 또는 내장이라고도 부른다.
is-implemented-in-terms-of 예제
이러한 관계는 일반적으로 특정 클래스를 상속받아 새로운 기능을 추가하거나 다르게 만들려고 할 때 발생한다.
가령 list를 상속받아 Set 클래스를 만든다고 하면 두 클래스의 관계가 is-a 관계가 될 수 없으므로 list를 Set 클래스 내부에 데이터 변수로 사용하게 되는데 이때 Set 객체는 list 객체를 써서 구현되는 형태가 된다.
template<class T>
class Set {
public:
...
private:
std::list<T> rep;
};