제 목 Part3 5강 | Object Relationship 질문
작성자 홍진현 등록날짜 2021-11-02 18:19:30 / 조회수 : 30
강좌명 [패키지] 다이렉트X 11 2D Part 1 ~ 4 패키지
  • 안녕하십니까? 교수님 질문드립니다.

    Object Relationship을 코드로 표현해보았습니다. 그런데 Composition과 Aggregation 관계가 이론상으로는 이해를 하고 있습니다.

    그런데 뭔가 코드로 구현하면 헷갈리게 보입니다. blood는 part-of 구현한게 맞아보이는데, Has-a 관계는 클래스에서 맴버로 가지고 있는게 맞는건가요? 아니면 Has-a 관계는 어떻게 구현하는 것인가요?

    class Human
    {
    private:
        class blood* blood = nullptr; // Part-of
        class Cola* cola = nullptr; // Has-a
        class Doctor* doctor = nullptr; // Uses-a
        
    public:
        Human(const Cola* cola); // Depends-on

    };


    class Student final // Student <-> Human 서로의 관계는 is-a 관게
        : public Human
    {

    };


    class  blood final
    {

    };

    class Cola final
    {

    };

    class Doctor final
    {
    private:
        class Human* patient = nullptr; // Uses-a
    };
     

    항상 감사합니다.

  • 작성자 : 게임클래스 / 등록날짜 : 2021-11-09 16:06:32
  • 안녕하세요.

    게임강의의 명품 클래스!

    게임클래스 입니다.
     

    Aggregation과 Composition은 모두 특정 형식을 멤버로서 포함하는 관계로, 두 관계를 판단하는 기준은 두 개체의 결속력입니다.

    Aggregation의 경우 다소 약한 결속으로, 주로 외부에 대한 의존성을 가지며 대상 개체가 내부에서 생성, 소멸하지 않고, 서로 수명을 달리합니다.

    반면 Composition의 경우 강한 결속을 전제로 하며, 대상 개체가 내부에서 생성, 소멸하며, 동시에 서로 수명을 함께합니다.

    작성하신 코드를 예시로 들 경우, Cola는 외부에서 생성된 후 Human의 생성자를 통해 전달되어 활용되지만, Human과 의미상 밀접한 관계를 가지지 않으며, 두 개체는 수명을 함께하지 않습니다. 그러나 Blood는 Human의 종족을 의미하고, 외부에서 주입되지 않고 내부에서 생성, 소멸할 것이며, Human의 소멸은 곧 Blood의 소멸을 의미합니다.

    아. 그리고 참고로 Blood를 종족을 의미하는 Brood의미로 생각하고 한 답변인 점을 감안해 주시기 바랍니다.

    • 추가적으로 선생님께서
    • 학생코드가 Human 클래스안에 멤버들은 다 포인터로 되어있고
    • 내부에서 생성하는 건지 외부에서 주입하는건지
      구현부가 없으니까 무슨 관계인지 정확하게 설명해 주기가 어렵다는 답변이 있으셨습니다.
      참고해주셔서 질문주시면 정확하게 알려드릴 수 있도록 하겠습니다.

    감사합니다.

     

    게임개발자가되는 가장빠른길!
    게임클래스.