UML은 Unified Modeling Language의 약자로, 소프트웨어 시스템의 설계와 시각화를 위한 표준화된 모델링 언어이다.
복잡한 소프트웨어 시스템의 구조, 동작, 상호작용을 시각적으로 표현하여 설계와 개발 과정을 체계적으로 정리할 수 있다. 이는 소프트웨어 엔지니어와 기획자, 설계자 등 다양한 이해관계자 간의 의사소통을 효과적으로 돕는 중요한 도구이다.
UML을 사용하는 이유
하나의 시스템을 개발하기 위해 보통 기획자, 개발자, 설계자, 분석가 등 여러 사람이 참여한다.
이때 시스템의 기능에 대해 코드로 작성하기엔 너무 길고, 한 번에 이해할 수 조차 없다.
기능과 구조를 문서화하여 이해시키는 것이 훨씬 효율적일 것이다.
UML은 시스템을 시각적으로 표현함으로써 이러한 문제를 해결한다.
표준화된 기호와 문법을 사용해 복잡한 시스템을 명확하고 쉽게 이해할 수 있도록 도와준다.
요약하면 아래와 같다.
- 복잡한 시스템이나 아이디어를 비개발자도 이해할 수 있다.
- 시스템의 전체 구조를 한눈에 파악할 수 있다.
- 표준화된 표현 덕분에 개발자 간의 의사소통 오류를 방지할 수 있다.
UML의 다이어그램 종류
UML은 크게 구조 다이어그램과 행위 다이어그램 두 가지 카테고리로 나뉜다.
1. 구조 다이어그램 (Structural Diagram)
구조 다이어그램은 시스템의 정적인 구조를 표현한다.
다이어그램 종류 | 설명 |
---|---|
클래스 다이어그램 | 시스템의 클래스, 속성, 메서드 및 클래스 간의 관계를 표현. 객체지향 설계의 핵심 도구. |
객체 다이어그램 | 특정 시점의 객체와 객체 간의 관계를 표현. 클래스 다이어그램의 인스턴스 수준 버전. |
컴포넌트 다이어그램 | 시스템을 구성하는 컴포넌트(모듈)와 그 관계를 표현. |
배치 다이어그램 | 시스템의 물리적 배포 구조를 표현. 하드웨어와 소프트웨어 구성 요소 간의 관계를 설명. |
패키지 다이어그램 | 시스템의 요소를 패키지 단위로 그룹화하여 의존성과 계층 구조를 표현. |
2. 행위 다이어그램 (Behavioral Diagram)
행위 다이어그램은 시스템의 동적인 행위와 상호작용을 표현한다.
다이어그램 종류 | 설명 |
---|---|
유스케이스 다이어그램 | 사용자가 시스템과 상호작용하는 방식(시나리오)을 표현. 요구사항 분석에 주로 사용. |
시퀀스 다이어그램 | 객체 간 메시지 전달 순서를 시간 순서에 따라 표현. |
활동 다이어그램 | 시스템의 동작 흐름이나 프로세스를 표현. 알고리즘과 워크플로우를 설명하는 데 유용. |
상태 다이어그램 | 객체의 상태 변화와 이벤트에 따른 전환을 표현. |
커뮤니케이션 다이어그램 | 객체 간의 상호작용을 메시지 중심으로 표현. 시퀀스 다이어그램과 유사하나 구조에 초점. |
대표적인 다이어그램
UML의 다이어그램 중 가장 많이 사용되는 3가지에 대해서 알아보자.
클래스 다이어그램
클래스 다이어그램은 시스템의 클래스와 이들 간의 관계를 시각적으로 표현한다.
커피 클래스를 예로 들어보자
Coffee 클래스를 정의한다.
- 이름을 나타내는
name: String
변수, 단맛을 나타내는Sweetnees: int
변수, 산미를 나타내는acidity: int
변수가 있다. - 함수의 이름은 make이고 리턴타입은 void인 메서드를 갖는다.
Coffee 클래스를 상속받는 Americano
클래스를 정의한다.
addShot
이라는 함수의 리턴타입은 void인 메서드를 갖는다.
Coffee 클래스를 상속받는 Vanila Latte
클래스를 정의한다.
addShot
이라는 함수의 리턴타입은 void인 메서드를 갖는다.addSyrup
이라는 함수의 리턴타입은 void인 메서드를 갖는다.
이를 클래스 다이어그램으로 표현하면 다음과 같다.
이렇게 그림으로 그려서 보면 훨씬 더 이해가 빠르지 않을까?
이렇게 다이어그램으로 협업하면 오해와 불필요한 소통은 줄이고 명확하게 소통을 할 수 있다.
하지만 클래스다이어그램은 함수의 내부구현까지는 알지 못한다.
유스케이스 다이어그램
유스케이스 다이어그램은 사용자(Actor) 관점에서 시스템의 기능과 상호작용을 나타낸다.
어떤 행동을 하는지, 그리고 그 행동을 위해 어떤 과정이 있는지 그 과정 끝에 어떤 결과가 발생하는지에 대해서 그림으로 그려낸 것이다.
웹 사이트에 대한 유스케이스를 먼저 나열해 보면 뭐가 있을까?
- 사용자는 로그인을 할 수 있다.
- 문서를 검색할 수 있다.
- 검색한 문서를 미리보기할 수 있다.
- 문서는 다운로드할 수 있다.
- 진행 중인 이벤트들을 볼 수 있다.
- 사용자는 문서를 업로드할 수 있다.
- 업로드한 문서들을 관리할 수 있다.
- 사용자를 추가할 수 있다.. 등등..
위에서 나열한 기능들을 유스케이스로 변환하면 다음과 같다.
유스케이스 다이어그램은 시스템의 주요 기능을 큰 틀에서 이해할 수 있도록 도와준다.
그러나 각 기능의 구체적인 구현 방식까지는 보여주지 않는다.
시퀀스 다이어그램
시퀀스 다이어그램은 객체 간 상호작용을 시간 순서에 따라 표현한다.
데이터 흐름과 그 과정에서 발생하는 메시지 교환을 직관적으로 보여준다.
사진 촬영 예시
사용자가 휴대폰으로 사진을 찍을 때 데이터의 흐름을 적어보자.
- 사용자가 카메라 앱을 실행한다.
- 앱이 디바이스의 카메라에 접근한다.
- 사용자가 화면을 통해 카메라 영상을 본다.
- 사진을 찍는다.
이를 시퀀스 다이어그램으로 표현하면 다음과 같다.
시퀀스 다이어그램은 순서대로 흘러가는 과정을 명확히 보여줘 비개발자도 쉽게 이해할 수 있는 장점이 있다.
그러나 시스템 전체보다는 특정 기능에 초점을 맞추기 때문에 전체 구조를 한눈에 보기에는 한계가 있다.
참고
UML (Unified Modeling Language) 이란?
개발자가 알아야 할 UML 개념 및 종류 (feat. 협업 시 필수!)