Skip to content

Latest commit

 

History

History
41 lines (36 loc) · 1.51 KB

Item38.md

File metadata and controls

41 lines (36 loc) · 1.51 KB

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

합성

  • Person 객체는 Address, PhoneNumber 객체로 이루어져 있다.
class Address{};

class PhoneNumber{};

class Person{
public:
    Address address;
    PhoneNumber phoneNumber;
};
  • 어떤 타입의 객체들이 그와 다른 타입의 객체들을 포함하고 있을 경우 성립하는 타입들 사이의 관계를 합성이라 한다.
  • 레이어링, 포함, 통합, 내장등으로도 불린다.

응용 영역과 구현 영역

응용 영역

  • 일상생활에서 볼 수 있는 사물을 본뜬 객체이다.
  • 예로는 사람, 이동수단, 비디오 프레임등이 있다.
  • 객체 합성이 응용 영역의 객체들 사이에서 일어나면 has-a 관계이다.

구현 영역

  • 버퍼, 뮤텍스, 탐색트리 등 순수하게 시스템 구현만을 위한 인공물
  • 객체 합성이 구현 영역에서 일어나면 is-implemented-in-terms-of 관계이다.
  • A는 B을 써서 구현되는형태의 설계를 한다면 is-implemented-in-terms-of 관계이다.
template<class T>
class Set{
public:
    bool member(const T& item) const;
    void insert(const T& item);
    void remove(const T& item);
    std::size_t size() const;

private:
    std::list<T> rep;
}
  • 자료구조 set을 자료구조 list를 이용하여 만들기 때문에 is-implemented-in-terms-of 관계라고 할 수 있다.