UML이란?
UML이란 Unified Modeling Language의 약자로 1997년 OMG에서 표준으로 채택한 통합모델링언어 이다.
즉, 어떠한 모델을 만드는 표준언어로서, 모델이란 것은 제품을 미리 검증하고, 설계하는 과정에서 필요하다.
소프트웨어에서의 모델은 건축, 항공 등의 모델과는 조금 다른 면이 있는데, 해당 분야는 직접 만드는 것과 설계 사이에는 엄청난 비용의 차이가 있다. 하지만 UML 다이어그램을 그리고 모델을 만드는 일은 오히려 개발보다 비용이 많이 들 수도 있기 때문에, UML은 다음과 같을 때 사용한다.
- 시험해 볼 구체적인 것이 있을 때
- 코드로 시험하는 것보다 UML로 시험해 보는 쪽이 비용이 덜 들 때
그리고 이러한 목적으로 UML을 사용하는 유형에는 다음이 있다.
- 다른 사람들과의 의사소통 또는 설계 논의
- 전체 시스템의 구조 및 클래스의 의존성 파악
- 유지보수를 위한 설계의 back-end 문서
UML의 종류
Uml 다이어그램은 클래스, 시퀀스, 유즈케이스 등 구조와 행위따라 총 14개의 다이어그램이 있다.
이때, 개발하는 시스템의 유형과 규모에 따라서 필요한 다이어그램을 선택하여 사용한다.
✔️ 구조 다이어그램(Structure Diagram)
클래스 다이어그램, 객체 다이어그램, 복합체 구조 다이어그램, 배치 다이어그램, 컴포넌트 다이어그램, 패키지 다이어그램
✔️ 행위 다이어그램(Behavior Diagram)
활동 다이어그램, 상태 머신 다이어그램, 유즈 케이스 다이어그램, 상호작용 다이어그램
분류 | 다이어그램 유형 | 목적 | |
구조 다이어그램 (Structure Diagram) |
클래스 다이어그램 (Class Diagram) |
시스템을 구성하는 클래스들 사이의 관계를 표현한다. | |
객체 다이어그램 (Object Diagram) |
객체 정보를 보여준다. | ||
복합체 구조 다이어그램 (Composite Structure Diagram) |
복합 구조의 클래스와 컴포넌트 내부 구조를 표현한다. | ||
배치 다이어그램 (Deployment Diagram) |
소프트웨어, 하드웨어, 네트워크를 포함한 실행 시스템의 물리 구조를 표현한다. | ||
컴포넌트 다이어그램 (Component Diagram) |
컴포넌트 구조 사이의 관계를 표현한다. | ||
패키지 다이어그램 (Package Diagram) |
클래스나 유스케이스 등을 포함한 여러 모델 요소들을 그룹화해 패키지를 구성하고 패키지들 사이의 관계를 표현한다. | ||
행위 다이어그램 (Behavior Diagram) |
활동 다이어그램 (Activity Diagram) |
업무 처리 과정이나 연산이 수행되는 과정을 표현한다. | |
상태 머신 다이어그램 (State Machine Diagram) |
객체의 생명주기를 표현한다. | ||
유스케이스 다이어그램 (Use Case Diagram) |
사용자 관점에서 시스템 행위를 표현한다. | ||
상호 작용 다이어그램 Interaction Diagram) |
순차 다이어그램 (Sequence Diagram) |
시간 흐름에 따른 객체 사이의 상호작용을 표현한다. | |
상호작용 개요 다이어그램 (Interaction Overview Diagram) |
여러 상효작용 다이어그램 사이의 제어 흐름을 표현한다. | ||
통신 다이어그램 (Communication Diagram) |
객체 사이의 관계를 중심으로 상호작용을 표현한다. | ||
타이밍 다이어그램 (Timing Diagram) |
객체 상태 변화와 시간 제약을 명시적으로 표현한다. |
클래스 다이어그램 (Class Diagram)
클래스 다이어그램은 거의 모든 객체 지향 메서드를 관통하는 핵심 모델링 기법이다.
클래스 다이어그램은 시스템의 객체 유형과 객체 간에 존재하는 다양한 종류의 정적 관계를 설명한다.
객체 다이어그램(Object Diagram)
객체 다이어그램은 객체와 데이터 값을 포함한 인스턴스에 대한 시각화를 말한다. 객체 다이어그램은 클래스 다이어그램에 대한 인스턴스를 보여주며, 특정 시점의 시스템 세부 상태에 대한 스냅샷을 보여준다. 클래스 다이어그램과 객체 다이어그램의 차이점은 클래스 다이어그램은 클래스와 그 관계로 구성된 추상 모델을 나타내는 반면, 객체 다이어그램은 특정 시점에 대한 인스턴스를 나타내어 보다 구체적인 표현이 가능하다.
클래스 다이어그램 vs 객체 다이어그램
클래스 다이어그램과 객체 다이어그램은 매우 유사한 형태를 띄고 있다. 하지만 사실 클래스 다이어그램과 객체 다이어그램은 코드 베이스 관점에서 두 가지 다른 측면을 제공한다.
클래스 다이어그램 예제
아래 그림의 클래스 다이어그램 예제는 사용자와 첨부파일이라는 두 개의 클래스를 나타낸다. 사용자는 여러 개의 첨부 파일을 업로드할 수 있으므로 두 클래스는 연관(association)를 가지며, 첨부 파일 쪽에는 0...* 과 같은 다중성이 존재한다.
객체 다이어그램 예제
아래 그림의 객체 다이어그램 예제는 Peter(즉, 사용자)가 두 개의 첨부 파일을 업로드하려고 할 때 User와 Attachment 클래스의 객체 인스턴스가 어떻게 '보이는지(look like)'를 보여준다. 따라서 업로드할 두 개의 첨부 파일 객체에 대한 두 개의 인스턴스 사양이 존재하게 된다.
복합체 구조 다이어그램(Composite Structure Diagram)
복합 구조 다이어그램은 UML 2.0에 추가된 새로운 아티팩트 중 하나이다. 복합 구조 다이어그램은 클래스 다이어그램과 유사하며 주로 미시적 관점에서 시스템을 모델링할 때 사용되는 다이어그램이지만, 전체 클래스가 아닌 부분적으로 개별 클래스를 나타낸다는 점에서 차별된다.
배치 다이어그램(Deployment Diagram)
배치 다이어그램은 객체 지향 소프트웨어 시스템의 물리적 측면을 모델링하는 데 도움을 준다.
배치 다이어그램은 소프트웨어 아티팩트(artifacts)가 위치할 곳에 배치할 때 시스템의 아키텍처를 보여주는 구조 다이어그램이다. 일반적으로 하드웨어 구성과 기존 소프트웨어 구성 요소를 함께 모델링하는 작업이 포함된다.
아티팩트(artifacts) : 실행 파일, 라이브러리, 소프트웨어 컴포넌트, 문서, 데이터베이스와 같은 개발 프로세스의 결과물에 대한 개별 요소를 말한다.
컴포넌트 다이어그램(Component Diagram)
컴포넌트 다이어그램은 컴포넌트를 서로 연결하여 더 큰 컴포넌트 또는 소프트웨어 시스템을 형성하는 방법을 나타낸다. 컴포넌트 다이어그램은 소프트웨어 컴포넌트의 아키텍처와 컴포넌트 간의 종속성을 보여준다. 이러한 소프트웨어 컴포넌트에는 런타임 컴포넌트, 실행 가능한 컴포넌트, 소스 코드 컴포넌트가 포함된다.
패키지 다이어그램(Package Diagram)
패키지 다이어그램은 패키지와 패키지 간의 종속성을 보여주는다이어그램이다. 아래 그림과 같이 패지키 다이어그램은 다계층(다중 계층) 애플리케이션 모델과 같이 시스템에 대한 다양한 뷰를 표시할 수 있다.
활동 다이어그램(Activity Diagram)
액티비티 다이어그램은 선택, 반복, 동시성을 지원하는 단계별 활동 및 작업의 워크플로우를 그래픽으로 표현한 다이어그램이다. 복잡한 비즈니스 규칙 및 운영 탐색과 같은 대상 시스템의 제어 흐름을 설명하며, 유스 케이스와 함께 비즈니스 프로세스를 설명한다.
특히 액티비티 다이어그램은 UML에서 계산 및 조직 프로세스(즉, 워크플로우)를 모두 모델링하기 위한 것이다.
상태 머신 다이어그램(State Machine Diagram)
상태 머신 다이어그램은 데이비드 하렐의 상태 다이어그램 개념을 기반으로 하는 시스템의 동작을 설명하기 위한 다이어그램이다. 상태 머신 다이어그램은 허용된 상태와 전환은 물론 이러한 전환에 영향을 미치는 이벤트를 표현한다. 아울러 상태 머신 다이어그램은 객체의 전체 수명 주기를 시각화하여 상태 기반 시스템을 더 잘 이해하는 데 도움이 된다.
상태 머신 다이어그램 예제
유스 케이스 다이어그램
유스 케이스 모델은 시스템의 기능적 요구 사항을 사용 사례 측면에서 설명한다. 이는 시스템의 의도된 기능(유스 케이스)과 환경(액터)에 대한 모델이다. 유스 케이스를 통해 시스템에서 필요한 것과 시스템이 이러한 요구 사항을 제공하는 방법을 연관시킬 수 있다.
유스 케이스 모델을 식당에서 볼 수 있는 메뉴판과 같은 개념으로 생각하면 된다. 메뉴를 보면 어떤 메뉴를 이용할 수 있는지, 개별 요리가 무엇인지, 가격은 얼마인지 알 수 있다. 또한 레스토랑에서 어떤 종류의 요리(이탈리안, 멕시칸, 한식...)를 제공하는지도 알 수 있다. 메뉴를 보면 해당 레스토랑에서 제공 받을 수 있는 식사 경험에 대한 전반적인 서비스를 예상할 수 있다. 메뉴는 사실상 레스토랑의 행동을 "모델링"하는 것이다. 유스 케이스 모델은 매우 강력한 계획 도구이기 때문에 일반적으로 모든 팀원이 시스템 및 소프트웨어 개발 주기의 모든 단계에서 사용한다.
유스 케이스 다이어그램 예제
시퀀스 다이어그램(Sequence Diagram)
시퀀스 다이어그램은 시간 순서에 따라 객체들의 협업을 모델링하는 다이어그램이다. 시퀀스 다이어그램은 유스 케이스의 특정 시나리오에서 객체가 다른 객체와 상호 작용하는 방식을 보여준다. 비주얼 패러다임과 같은 모델링 도구는 몇 번의 클릭만으로 복잡한 시퀀스 다이어그램을 만들 수 있으며, 특히 유스 케이스 설명에서 정의한 이벤트 흐름에서 시퀀스 다이어그램을 생성할 수 있다.
상호작용 개요 다이어그램(Interaction Overview Diagram)
상호작용 개요 다이어그램은 상호작용의 제어 흐름에 대한 개요에 중점을 둔다. 노드가 상호작용 또는 상호작용 발생인 액티비티 다이어그램의 변형된 형태이다. 상호작용 개요 다이어그램은 메시지와 라이프 라인이 숨겨진 상호작용을 설명한다. "실제(real)" 다이어그램을 연결하여 상호작용 개요 다이어그램 내에서 다이어그램 간에 고도의 탐색성을 달성할 수 있다.
상호작용 개요 다이어그램 예제
커뮤니케이션 다이어그램(Communication Diagram)
시퀀스 다이어그램과 마찬가지로 커뮤니케이션 다이어그램도 유스 케이스의 동적 동작을 모델링하는 데 사용된다. 시퀀스 다이어그램과 비교할 때, 커뮤니케이션 다이어그램은 시간 순서보다는 객체들의 협업을 보여주는 데 더 중점을 둔다. 실제로는 의미적으로 동일하기 때문에 비주얼 패러다임을 사용하면 둘 중 하나를 생성할 수 있다.
커뮤니케이션 다이어그램 예제
상호작용 개요 다이어그램(Interaction Overview Diagram)
상호작용 개요 다이어그램은 상호작용의 제어 흐름에 대한 개요에 중점을 둔다. 노드가 상호작용 또는 상호작용 발생인 액티비티 다이어그램의 변형된 형태이다. 상호작용 개요 다이어그램은 메시지와 라이프 라인이 숨겨진 상호작용을 설명한다. "실제(real)" 다이어그램을 연결하여 상호작용 개요 다이어그램 내에서 다이어그램 간에 고도의 탐색성을 달성할 수 있다.
상호작용 개요 다이어그램 예제
타이밍 다이어그램(Timing Diagram)
타이밍 다이어그램은 주어진 기간 동안 객체의 동작을 보여준다. 타이밍 다이어그램은 시퀀스 다이어그램의 특수한 형태이다. 타이밍 다이어그램과 시퀀스 다이어그램의 차이점은 축이 반대로 되어 있어 시간이 왼쪽에서 오른쪽으로 증가하고 라이프 라인이 세로로 배열된 별도의 구획에 표시된다는 점이다.
타이밍 다이어그램 예제
reference