본문 바로가기
Java Study

어그리게이션(Aggregation)과 컴포지션(Composition)

by xogns93 2024. 8. 21.

어그리게이션(Aggregation)컴포지션(Composition)은 객체 지향 프로그래밍에서 클래스 간의 관계를 설명하는 두 가지 중요한 개념입니다. 두 개념 모두 "부분-전체 관계(Part-Whole Relationship)"를 나타내지만, 그 결합의 강도와 객체 간의 의존성 측면에서 차이가 있습니다.

 

 

1. 어그리게이션(Aggregation)

어그리게이션은 객체 간의 약한 결합(Loose Coupling)을 나타내는 관계입니다. 이는 "부분-전체" 관계에서 부분(Part) 객체가 전체(Whole) 객체에 포함되지만, 두 객체는 독립적인 생명 주기를 가집니다. 즉, 전체 객체가 없어져도 부분 객체는 여전히 존재할 수 있습니다.

  • 특징:
    • 독립적인 생명 주기: 전체 객체가 삭제되어도 부분 객체는 계속 존재할 수 있습니다.
    • 약한 결합: 부분 객체와 전체 객체 간의 결합이 비교적 약합니다.
    • 부분 객체의 재사용 가능성: 부분 객체는 다른 전체 객체에서 재사용될 수 있습니다.
  • 예시:
    • 학교와 학생: 학교(School) 클래스가 여러 학생(Student) 객체를 포함하고 있을 때, 학교가 없어져도 학생들은 여전히 존재할 수 있습니다.
class Student {
    private String name;

    public Student(String name) {
        this.name = name;
    }
}

class School {
    private List<Student> students;

    public School() {
        students = new ArrayList<>();
    }

    public void addStudent(Student student) {
        students.add(student);
    }
}

 

2. 컴포지션(Composition)

 

컴포지션은 객체 간의 강한 결합(Strong Coupling)을 나타내는 관계입니다. 이는 "부분-전체" 관계에서 부분 객체가 전체 객체의 일부로 포함되며, 전체 객체가 삭제되면 부분 객체도 함께 삭제됩니다. 부분 객체는 전체 객체에 강하게 의존하며, 독립적으로 존재할 수 없습니다.

  • 특징:
    • 종속적인 생명 주기: 전체 객체가 삭제되면 부분 객체도 함께 삭제됩니다.
    • 강한 결합: 부분 객체와 전체 객체 간의 결합이 강합니다.
    • 부분 객체의 독립성 없음: 부분 객체는 독립적으로 존재할 수 없으며, 전체 객체에 종속적입니다.
  • 예시:
    • 자동차와 엔진: 자동차(Car) 클래스가 엔진(Engine) 객체를 포함하고 있을 때, 자동차가 없어지면 엔진도 함께 없어집니다. 엔진은 자동차의 일부로 간주됩니다.
class Engine {
    private String type;

    public Engine(String type) {
        this.type = type;
    }
}

class Car {
    private Engine engine;

    public Car(String engineType) {
        this.engine = new Engine(engineType);
    }
}

 

어그리게이션과 컴포지션 비교

 

특성 어그리게이션 (Aggregation) 컴포지션 (Composition)
결합도 약한 결합 (Loose Coupling) 강한 결합 (Strong Coupling)
생명 주기 독립적인 생명 주기 (부분 객체는 전체 객체 없이도 존재 가능) 종속적인 생명 주기 (전체 객체가 사라지면 부분 객체도 사라짐)
객체 간 의존성 부분 객체는 독립적이며, 다른 전체 객체에 포함될 수 있음 부분 객체는 전체 객체에 강하게 의존하며, 독립적으로 존재 불가
예시 학교와 학생 (학교가 없어도 학생은 존재) 자동차와 엔진 (자동차가 없어지면 엔진도 함께 사라짐)

 

 

요약

  • 어그리게이션: 클래스 간의 관계에서 부분 객체가 전체 객체와 약한 결합을 가지며, 전체 객체가 없어져도 부분 객체는 여전히 존재할 수 있는 관계를 나타냅니다.
  • 컴포지션: 클래스 간의 관계에서 부분 객체가 전체 객체에 강하게 결합되며, 전체 객체가 없어지면 부분 객체도 함께 삭제되는 관계를 나타냅니다.

이 두 개념은 객체 지향 설계에서 중요한 역할을 하며, 객체 간의 관계를 설계할 때 결합의 강도를 결정하는 데 사용됩니다.