2024년 1월 16일 작성
OOP - 합성 관계와 집합 관계
합성과 집합을 이용하여 전체와 부분 관계를 나타낼 수 있습니다.
전체와 부분 관계 정의하기 : 합성과 집합
- 합성 관계와 집합 관계는 전체와 부분을 나타내는 관계입니다.
- 두 관계는 부분 객체의 생성 권한이 어디 있느냐로 구분됩니다.
- 전체 객체와 부분 객체의 결합도에 따라, 합성 관계로 구성할지 집합 관계로 구성할지 결정하면 됩니다.
합성 관계 (Composition)
- 전체 객체가 부분 객체의 제어권을 갖습니다.
- 전체와 부분의 life time이 같습니다.
- 일체형 computer를 예로 들 수 있습니다.
Computer
객체가 생성될 때,MainBoard
,CPU
,Memory
객체도 생성됩니다.- 그리고 생성된 객체의 주소는
Computer
객체의 field 변수에 저장합니다.
- 그리고 생성된 객체의 주소는
- 따라서
Computer
객체가 사라지면,MainBoard
,CPU
,Memory
객체도 사라집니다.
public class Computer {
private MainBoard mb;
private CPU cpu;
private Memory memory;
public Computer() {
this.mb = new MainBoard();
this.cpu = new CPU();
this.memory = new Memory();
}
}
집합 관계 (Aggregation)
- 전체 객체가 부분 객체의 제어권을 갖지 않습니다.
- 전체와 부분의 life time이 다릅니다.
- 조립식 computer를 예로 들 수 있습니다.
Computer
객체가 생성될 때, 이미 생성되어 있는MainBoard
,CPU
,Memory
객체를 생성자 인수로 가져옵니다.- 따라서
Computer
객체가 사라져도, memory 상의MainBoard
,CPU
,Memory
객체는 사라지지 않습니다.
public class Computer {
private MainBoard mb;
private CPU cpu;
private Memory memory;
public Computer(MainBoard mb, CPU cpu, Memory memory){
this.mb = mb;
this.cpu = cpu;
this.memory = memory;
}
}