본문 바로가기
Concepts/UML

UML - 복합 구조(Composite structure)

by ocwokocw 2021. 5. 5.

- 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다.

https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-composite-structure-diagram/

 

- 복합 구조(Composite Structure)

UML2 에서는 클래스를 계층적인 내부 구조로 분해할 수 있다. 내부 구조로 분해한다는것은 복잡한 객체를 여러 개의 부분으로 나눌 수 있도록 해준다는 의미가 된다.

 

TV 뷰어 클래스가 특정 인터페이스를 필요로 하는 상황을 생각해보자. 이때 공-소켓 표기법과 인터페이스의 리스트를 기록하는 방법 2가지가 있는데 StarUML 5.0 에서는 공-소켓 표기법을 지원하고 있으니 공-소켓 표기법을 이용하여 나타내보자.

위의 다이어그램에서 TV 뷰어는 TV 제어 UI, TV 제어 API, 화면표시, 튜닝, 영상 스트림 인터페이스와 관계를 맺고 있다. 눈썰미가 있다면 2 가지로 타입을 나눌 수 있다. 공 모양으로 표시된 TV 제어 UI 와 TV 제어 API 부분과 소켓 모양의 화면 표시, 튜닝, 영상 스트림이다.

 

공 모양의 요소들은 제공되는 인터페이스(<<provided interfaces>>)들을 나타내고, 소켓 모양의 요소들은 필요한 인터페이스(<<required interfaces>>)들을 나타낸다.


- 내부 파트(Internal part)

복합구조 다이어그램을 사용하는 이유는 아래 다이어그램처럼 해당 클래스의 내부 부분들을 나타내기 위해서이다.

위의 다이어그램은 이해하기에 복잡한 수준은 아니지만 설명하지 않은 요소들이 나오기 때문에 요소를 먼저 설명해야 할 것 같다.

  • 부분(Part): 위의 다이어그램에서 TV 뷰어 클래스안의 제어부:  :화면 생성기 로 나타낸 요소들을 '부분' 이라고 한다. 이름:클래스 형태로 나타내며 둘 다 선택사항이다. [1] 이라고 써있는 부부는 다중성이며, Star UML 5.0 에서는 multiplity 로 되어있는 곳에 숫자를 기입하면 자동으로 표시된다.
  • 연결자(Connector): 부분들(제어부:와 :화면 생성기) 사이에 선으로 이어진 부분이 있는데 이를 '연결자' 라고 한다.
  • 포트(Port): TV뷰 테두리에 조그마한 네모칸 5개가 보일것이다. 이를 '포트'라고 한다.
  • 대리 연결자(Delegation connector): 포트와 부분 사이에 이어진 화살표를 '대리 연결자'라고 한다.

1번째 다이어그램과 2번째 다이어그램은 너무 간단하거나 복잡한감이 없지 않아 있다. 외부 구조로의 포트를 사용하면 특정 인터페이스들끼리 논리적인 그룹으로 엮을 수 있다. 아래는 화면, 튜닝, API 포트를 이용하여 5개의 인터페이스들을 논리적인 그룹을 엮은 다이어그램이다.


- Class 다이어그램 vs 복합 구조

위의 다이어그램들을 살펴보면 클래스 다이어그램하고 차이점이 있는지 의문이 들 수도 있다. 위에서 제어부와 화면생성기를 내부 파트로 표현했지만 클래스 다이어그램에서 composition 으로 내부 파트를 표현하면 차이점이 있는지라고 반문할 수 있기 때문이다.

위의 다이어그램에서 왼쪽 부분인 Class Item은 클래스 다이어그램의 요소들을 이용하여 Item, Description, Pricing의 관계를 표현하였다. Description과 Pricing은 Item의 구성요소(합성 - composition)이다. (집합 - Aggregation을 쓰지 않고 합성 - Composition을 사용한것은 여기서 Description과 Pricing이 Class Item 이 소멸할때 같이 소멸하는, 즉 생명주기를 같이 한다고 보았기 때문이다.) 그리고 Description과 Pricing 사이의 Connector도 표현하였다.

 

위의 다이어그램에서 오른쪽 부분인 Composite structure Item은 내부 부분(Part)를 이용하여 Description과 Pricing을 Item 객체안에 추가하였고, 두 부분을 Connector로 이어주었다.

 

Composite와 합성을 이용하여 표현한 두 표기의 차이점은 Description과 Pricing 사이의 관계 참조를 표현하는 차이에 있다. 클래스 다이어그램은 두 객체들 사이에 참조가 Item 안에 있다는것을 명확히 나타내느냐의 차이이다.

 

댓글