클래스간의 관계는 통상 4단계로 구별할 수 있다.
1. dependency:
- 의존 관계( A ------> B: A는 B에 의존한다.)
- 의존 관계로 모든 객체들은 대부분 의존 관계를 갖는다.
- A 클래스에서 B 클래스를 사용하고 있다면 이것은 dependency 관계이다.
- 왜냐하면 B를 변경하게 되면 A가 영향을 받기 때문이다.
2. association:
- 의존 관계 중 member 변수 관계(A-B: A는 B를 포함한다.)
- A 클래스가 B 클래스를 맴버변수로 포함해서 의존하는 관계
- 학생이 차를 소유한다: 학생 - 차
- 학생이 라디오를 소유한다. - 라디오
굳이 association을 세분화 한다면..
3. aggregation:
- association 중 whole - part 관계(A◇-B: A는 B를 부품으로 포함한다.)
- A 클래스가 B를 맴버 변수로 포함해서 의존하는데 부품으로 존재하는 경우
- 이때 A와 B는 라이프사이클리 다를 수 있다.
- 차 - 블랙박스 : 카의 부품 (차를 구입한 후 블랙박스를 추가로 장착할 수 있다.)
4. composition:
- association 중 life cyclel 일치하는 경우(A◆-B: A는 B와 라이프사이클이 일치하게 포함한다.)
- A 클래스가 B를 맴버 변수로 포함하는데 A가 생성되면서 B도 생성되는 관계
- 차 - 엔진: 차가 만들어질 때 엔진도 같이 생성한다.
aggregation 부터는 UML 2.0 부터 없어질 위기에 있었지만 기존 버전과의 호환성 때문에 목숨을 유지하고 있다. 개발자 입장에서 굳이 aggregation인지, composition인지 고민할 필요 없이 association까지만 쓰면 될듯~