JAVA 객체지향 디자인 패턴<UML과 GoF 디자인 패턴 핵심 10가지로 배우는> 정리
UML 연관 관계의 특별 경우로 전체와 부분의 관계를 명확하게 명시하고자 할 때 사용한다.
1. 집약 관계(aggregation)
- 한 객체가 다른 객체를 포함하는 것
- '부분'을 나타내는 객체를 다른 객체와 공유할 수 있다.
- '전체'를 가리키는 클래스 방향에 빈 마름모로 표시
- 전체 객체의 라이프타임과 부분 객체의 라이프타임은 독립적이다.
- 전체 객체가 메모리에서 사라진다 해도 부분 객체는 사라지지 않는다.
// Ex) 생성자에서 참조값을 인자로 받아 필드를 세팅한다.
public class Computer {
private MainBoard mb;
private CPU c;
//생성자
public Computer(MainBoard mb, CPU c) {
this.mb = mb;
this.c = c;
}
}
2. 합성 관계(composition)
- 부분 객체가 전체 객체에 속하는 관계
- '부분'을 나타내는 객체를 다른 객체(여러 전체 객체 혹은 다른 '부분' 객체)와 공유할 수 없다.
- '전체'를 가리키는 클래스 방향에 채워진 마름모로 표시
- 전체 객체의 라이프타임과 부분 객체의 라이프타임은 의존적이다.
- 전체 객체가 없어지면 부분 객체도 없어진다.
// Ex) 생성자에서 필드에 대한 객체를 생성한다.
public class Computer {
private MainBoard mb;
private CPU c;
//생성자
public Computer() {
this.mb = new MainBoard();
this.c = new CPU();
}
}