composition vs. aggregation
- Development/SW Engineering
- 2010. 6. 24.
UML 다이어그램에서 특히 집합 관계를 표시할 때, 헷갈리는 용어이다.
'A가 B에 속해있다.' 혹은 'B는 A를 포함한다'의 개념을 표현하고자 할 때 사용하는 표기인데,
어떤 경우에 이 관계는 composition 또는 aggregation이라고 말할 수 있는 것일까?
이에 대해, googling을 하던 중, 적어도 나에게는 와닿는 포스팅이 있어
소개하고자 한다.
물론, 단지 이 글 뿐만 아니라 다른 곳으로부터도 참고하였다.
참고 :
http://www.bestarticle.org/computer/association-aggregation-and-composition-what-are-they-and-how-do-they-differ/
Aggregation
Composition
Aggregation vs Composition
'A가 B에 속해있다.' 혹은 'B는 A를 포함한다'의 개념을 표현하고자 할 때 사용하는 표기인데,
어떤 경우에 이 관계는 composition 또는 aggregation이라고 말할 수 있는 것일까?
이에 대해, googling을 하던 중, 적어도 나에게는 와닿는 포스팅이 있어
소개하고자 한다.
물론, 단지 이 글 뿐만 아니라 다른 곳으로부터도 참고하였다.
참고 :
http://www.bestarticle.org/computer/association-aggregation-and-composition-what-are-they-and-how-do-they-differ/
Aggregation
- ◇--, 실선으로 표시
- 대상 객체에 대한 possession을 나타낸다. (ownership 아님)
- 순환 관계는 안됨 (자기 자신을 포함할 수 없음)
- "has-a" 관계
- "A가 B를 포함한다"고 했을 경우, B는 A의 구성요소이기도 하지만, A와 별도의 객체이다. 즉, 별도로 존재가능하다.
- "근로자"와 "주소" 객체가 있다고 할 경우, 모든 근로자는 주소를 갖고 있지만, 근로자 객체가 소멸한다고 해도 주소는 유효하다.
Composition
- ◆--, 실선으로 표시
- 대상 객체는 ownership을 나타낸다.
- aggregation과 비슷하나, 큰 차이점은 전체-부분에 대한 관계성이며, 부분 객체는 전체 객체 없이 별도로 존재할 수 없다.
- 즉, 'A가 B를 포함한다"고 했을 경우, composition에서는 A가 없는 상태에서의 B는 존재할 수 없으며, A가 소멸될 경우 B도 함께 소멸한다.
- 예를 들어, "근로자"와 "email주소" 객체가 있다고 했을 경우, 해당 근로자 객체가 소멸할 경우, 해당 근로자의 email주소 객체도 함께 소멸한다.
- "contains-a" 관계
- 순환 관계는 안됨 (자기 자신을 포함할 수 없음)
Aggregation vs Composition
- aggregation은 "has-a" 관계를, composition은 "contains-a" 또는 "전체-부분" 관계를 표현
- aggregation은 "전체"-"부분" 모두 독립적으로 존재할 수 있으나, composition은 "전체"가 "부분"의 생명 주기를 통제한다.
- aggregation은 composition에 비해 약한 관계임
- composition은 한 개의 전체에 한 개만 속할 수 있으나, aggregation은 여러 개의 전체에 0~n개 속할 수 있다.
'Development > SW Engineering' 카테고리의 다른 글
Law of Demeter - 디미터 (데메테르) 법칙 (0) | 2021.08.18 |
---|---|
12요소 (twelve factors) 애플리케이션 (0) | 2021.07.29 |
콘웨이 법칙 (Conway's Law), 역 콘웨이 법칙(Inverse Conway's Law) (0) | 2021.07.19 |
캐시(Cache) 적용 패턴 및 관리 전략 (0) | 2021.04.29 |
Strangler Fig Application Pattern - 교살자 무화과나무 패턴 (0) | 2021.04.18 |
PlantUML - 코드로 시퀀스다이어그램 그리기 (0) | 2021.04.07 |
VS Code에서 PlantUML 사용설정 (0) | 2021.03.31 |
Syntax Highlighter로 인용할 때 괄호 오류 보정하려면 (0) | 2010.07.17 |