ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;

    };


     

    댓글

Designed by Tistory.