8. Modeling - 2(UML)
UML과 여러 다이어그램들
8. Modeling - 2(UML)
UML이란?
UML이란 Unified Modeling Language의 약자로, 1997년 OMG(Object Management Group)에서 표준으로 채택한 통합 모델링 언어이다. 그래디 부치, 제임스 럼버(James Rumbaugh), 이바 야콥슨(Ivar Jacobson)의 합작으로 탄생했다.
UML은 소프트웨어의 시각적 모델을 만들기 위한 도안 표기법을 포함한다. 여러 종류의 다이어그램을 가진다는 말이다. 이들은 크게 구조적 다이어그램(static)과 행동 다이어그램(dynamic)으로 구분할 수 있다.
Structure Diagram
Static Diagram이라고도 불린다. 프로그램 동작과 관련 없이 확인할 수 있는 정적 요소들로 다이어그램을 표현하기 때문이다.
여러 다이어그램이 있지만, 여기서는 Class Diagram만 설명할 것이다.
Class Diagram
가장 널리 쓰이는 UML중 하나이며, 클래스간의 관계를 나타내기 위하여 사용하는 다이어그램이다. 클래스간의 관계는 3가지 종류가 있다.
-
Association, Aggregation/Composision : X has a Y
→ 해당 클래스 X의 멤버 변수로 클래스 Y의 객체를 가지고 있는 형태이다.
-
Inheritance(Generalization), Realization : X is a Y
→ 상속은 Class-Class 관계이며, 구현은 Class-Interface관계이다.
-
Dependency : X uses a Y
→ 의존은 클래스 X의 반환값이나 매개변수로 클래스 Y를 사용하는 형태이다.
클래스 다이어그램 - 클래스 표시 방법
클래스 다이어그램에서 클래스의 표기는 위와 같다.
- 가장 위에 클래스의 이름을 표시
- 중단부에는 변수를, 하단부에는 함수를 표시
- 변수와 함수 앞에 붙은 기호는 접근 제한자를 의미한다. (
-
=private,+
=public,#
=protected) - 변수와 함수 뒤의
:
기호 뒷 부분은 반환 타입이다.
클래스 다이어그램 - 관계 표시 방법
전체적인 관계 표시법과 다중성 표기법은 위의 이미지를 참고하자. 관계별 주의사항은 다음과 같다.
- Association은 참조 관계에 따라 실선이나 단방향 화살표를 사용한다. 실선은 서로가 서로를 참조하는 관계이며, 단방향은 화살표가 출발하는 클래스가 화살표가 향하는 클래스를 참조하는 관계이다.(Class X → Class Y , class X에는 y참조 존재)
-
Association에서 본인 객체를 가지는 경우가 있다.
-
Composition은
is a part of
관계이다. 사람의 부분으로 머리를 포함하지만, 머리 없이는 존재할 수 없다. -
Aggregation은
has a
포함관계이다. 컴퓨터는 메모리를 포함하지만, 없을 수도 있다. - Inheritance에서 화살표를 받는 쪽이 부모이다.
- Dependence는 점선 표시이며, 매개변수나 반환 타입으로 사용되는 관계이다.
클래스 다이어그램 - 예시
- 한 종목은 둘 이상의 팀을 가진다.
- 한 종목은 하나 이상의 경기장을 사용한다.
- 팀에는 한 명 이상의 선수와 주장을 포함한다.
- 운동선수는 후보선수와 주전선수로 구분할 수 있다.
등등
클래스 다이어그램 - 작성법
일련번호를 붙여놓은 요구사항을 보며 각 요소로 분류한다.
- 명사 → Class
- 형용사 → Attributes
- 동사 → Operations
사실 분류 끝났으면 위의 규칙을 지켜서 그리기만 하면 된다. 딱히 “이게 정답이다!” 할 것 없이 개인마다 결과물이 다르기 때문이다.
Behavior Diagam
시스템 외부에서 바라본 시스템의 동작(input, output)을 표현하는 다이어그램들이다.
Sequence Diagram
시스템 객체간의 상호작용을 나타내기 용이한 다이어그램이다. 시간순으로 위에서부터 아래로 내려가며, 객체간에 어떠한 메소드를 주고받는지 표시한다.
- 박스는 객체이다.
A : RentUI
로 표시된 박스는 Class RentUI의 객체 A를 의미한다. 동일 클래스의 다른 객체를 구분할 수 있다. - 박스에서 내려오는 점선은 객체의 생성부터 소멸까지의 라이프타임을 의미한다.
- 함수의 소유자는 화살표가 향하는 객체이다. 1번 동작인 RentVideo()는 RentUI에 속한 함수이다.
- loop라 적힌 박스는 해당 부분의 반복을 의미한다. 분기 또한 이런 방식으로 표시한다.
Communication Diagram
시퀸스 다이어그램과 커뮤니케이션 다이어그램은 표현 방식이 다를 뿐, 내용은 같다. 그저 초점을 객체 사이의 시간순 상호작용이냐, 네트워크냐의 차이가 있을 뿐이다.
State Diagram
상태와 이벤트가 발생했을 때 상태의 전이를 나타낸다. 상태의 전이는 AAA
[BBB]
/ CCC
이렇게 3가지 부분으로 나뉘는데, 각각 Transition, Condition, Action을 의미한다. AAA
는 전환 명칭, [BBB]
는 전환 조건, CCC
는 전환시 동작이다.
Activity Diagram
Activity란 연산들을 모아놓은 것, 세부 업무 등 광범위한 의미를 가진다. 행위의 분기와 흐름을 표현하기에 용이하다. 이 행동들을 원하는 조건으로 분류하여 각 라인에 배치할수도 있다. 이를 스윔레인이라고 한다.
여담이지만, UML을 그리는 도구는 조금만 찾아보면 많이 나온다.
참고자료
- https://gmlwjd9405.github.io/2018/07/04/class-diagram.html
- 소프트웨어 공학의 모든 것(최은만, 생능출판사, 2020)