본문 바로가기
Concepts/UML

UML - 패키지 다이어그램 - 개요와 의존

by ocwokocw 2021. 2. 10.

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

- 패키지 다이어그램

UML 에서 패키지는 어떤 구성요소라도 더 높은 수준의 단위로 묶을 수 있도록 해주는 구조이다. 각각의 패키지는 네임스페이스를 나타내는데, 이는 모든 클래스가 자신이 속한 패키지내에서 유일해야 한다는 소리이다. 어떤 클래스가 어디에 속하는지를 완벽하게 알기 위해서는 완전한 이름(fully qualified name)을 사용해야 한다. UML 에서 패키지 이름을 나타낼때에는 :: 을 사용한다. Date는 System::Date 와 같이 될 것이다.


- 패키지와 의존

규모가 큰 시스템에서는 패키지 다이어그램을 보아야 그 시스템의 구조를 제어할 수 있다. 패키지 다이어그램은 패키지간의 의존을 보여준다. A 패키지안의 어떤 클래스가 B 패키지의 어떤 클래스에 의존한다면, A는 B 에 의존을 가지고 있는 것이다.

위의 다이어그램은 의존의 흐름이 명확하다고 할 수 있다. 보통은 모든 의존이 한 방향으로 흐를 때에 명확하다고 생각할 수 있다. 사실 좀 모호한 표현이다. 책에서는 여기까지 말하며 자세한 얘기는 하지 않는다. 사실 위에 불안정성 I 값은 책에 나오지는 않고 내가 계산한것인데, 왜 이게 좋은 패키지 의존인지 로버트 C.마틴의 클린아키텍처를 근거로 생각해보면 아래와 같은 이유일것이다.

 

클래스레벨에서는 객체 지향 설계의 5대 원칙 - SOLID, 더 높은 수준의 컴포넌트 레벨에서는 ADP, SDP, SAP 원칙이 있다. 위의 다이어그램을 컴포넌트 설계원칙에서 생각해보면 사이클이 없으며(ADP), 불안정성 I 의 값이 항상 높은값에서 낮은 값에 의존하고(SDP), 시스템의 업무규칙인 도메인은 불안정성 I가 낮으므로 안정된 정도 만큼 추상화 된 컴포넌트이기 때문에(SAP) 좋은 패키지구조라고 얘기하고 있다고 생각한다.

 

위에서 얘기한 의존성에 관심이 있다면 ADP(ocwokocw.tistory.com/36), SDP(ocwokocw.tistory.com/37), SAP(ocwokocw.tistory.com/38) 를 참조하면 더 자세한 내용을 알 수 있다. 


- <<global>>

만약 어떤 패키지가 너무 많은 곳에서 쓰이고 있어서 의존을 표시할 경우 패키지 다이어그램을 보기가 힘들어진다면, 이런 경우에는 해당 패키지에 아래와 같이 <<global>> 키워드를 붙인다. StarUML 에서는 패키지에 global 스테레오타입을 지원하고 있지 않으니 그냥 global 쓰면 되겠다.


- 패키지를 바라보는 시각

위에서 나타낸 임대, 자산 관련 패키지 다이어그램을 살펴보면 도메인과 계층의 2가지 측면으로 바라볼 수 있다. 도메인 측면에서는 임대와 자산관련으로 나눌 수 있고, 계층의 측면에서는 프리젠테이션, 도메인, 데이터 매퍼, 데이터베이스로 나눌 수 있다.

위 다이어그램은 측면에 따라 나눈 것이기 때문에 진짜 패키지는 아니다. 이런 표기방식은 UML 다이어그램의 표준은 아니지만 프로젝트 구조를 이해하는데 매우 편리하다.

댓글