컴포지션 / 어그리게이션

윤이령·2026년 4월 21일

다중상속 단점

  • 클래스가 커짐
    • 결합도 : 상속이나 사용관계로 서로 의존도가 높아짐
    • 결합도가 낮을 수록 유지보수가 수월
    • 거대 클래스는 결합도를 높임
  • 컴파일 시간이 늘어남
    • 오픈 소스처럼 클래스 파일이 많으면 컴파일 시간이 늘어남

컴포지션

  • 멤버 변수로 포함하는 개념
  • 같이 생성되고 같이 삭제되는 관계
class Heart {
public:
    void beat() {}
};

class Person {
private:
    Heart heart; // Person 안에 포함됨 (Composition)
};

어그리게이션

  • 분리된 클래스의 객체를 포인터나 레퍼런스 변수로 포함
  • 외부 객체를 그냥 연결해서 쓰는 관계
class Student {
public:
    string name;
    Student(string n) : name(n) {}
};

class Professor {
private:
    Student* student; // 소유 아님 (aggregation)
public:
    void assign(Student* s) {
        student = s;
    }

    void show() {
        cout << student->name << endl;
    }
};

int main(){
  	Student s("Kim");     // 밖에서 생성
  	Professor p;          // 교수 생성

  	p.assign(&s);         // 가져다 씀
	p.show();
}

0개의 댓글