KoreanFoodie's Study

UML (클래스 다이어그램, 시퀀스 다이어그램) 간단 정리 본문

R & D/Software Engineering

UML (클래스 다이어그램, 시퀀스 다이어그램) 간단 정리

GoldGiver 2022. 10. 14. 16:13

UML (Unified Modeling Language)

UML 에는 Class, Sequence, Use Case, Component 등 다양한 종류가 있지만, 여기서는 주로 Class 와 Sequence 다이어그램을 정리한다.

 

클래스 다이어그램 (Class Diagram)

클래스들 사이의 관계는 다음과 같이 표현될 수 있다(참고 링크).

각 관계를 조금 더 자세히 기술하면 다음과 같다.

관계 표시 설명
연관 관계 (association) 실선이나 화살표 연관 관계는 오랜 시간 동안 같이할 객체와의 관계를 나타낸다(e.g. 자동차와 소유자의 관계)
보통 클래스의 속성(멤버 변수)에서 참조할 때 연관 관계를 가진다.
단방향 연관 관계의 경우, 화살표를 사용하여 클래스를 참조한다. 양방향 연관 관계의 경우 실선을 사용한다. 이때, "1..*" 같은 표현으로 다중성을 표시할 수 있다("1..* 은 1 또는 그 이상이라는 의미이다).
일반적으로 다대다 연관 관계(연관 클래스)는 일대다 단방향 연관 관계로 변환해 구현하는 것이 좋다.
일반화 관계 (generalization) 속이 빈 화살표 상속 관계에서 주로 사용한다.
기반 클래스가 추상 클래스일 경우, 이탤릭체나 스테레오 타입(e.g. '<< abstract>>')을 사용한다.
집합관계 집약 관계 (aggregation) 속이 빈 다이아몬드 전체 객체가 메모리에서 사라져도 부분 객체는 사라지지 않는다.
e.g. 생성자에서 참조값을 인자로 받아 필드를 세팅한다(this.piece = piece).
합성 관계 (composition) 속이 찬 다이아몬드 전체 객체가 없어지면 부분 객체도 없어진다.
e.g. 생성자에서 필드에 대한 객체를 생성한다(this.piece = new Piece());
의존 관계 (dependency) 점선 화살표 의존관계는 짧은 시간 동안 이용하는 관계이다(e.g. 자동차와 주유기의 관계).
연산의 인자(참조값)으로 사용되거나 메서드 내부에서 지역 객체로 참조될 때가 이에 해당한다.
실체화 관계 (realization) 빈 삼각형과 점선 인터페이스는 책임을 의미한다. 즉, 객체가 외부에 제공하는 서비스나 기능은 객체가 수행하는 책임으로 본다.
객체지향에서는 실체화 관계를 "can do this" 관계라고 한다(일반화 관계는 "is a kind of" 관계).
스테레오 타입(<<interface>>)을 활용한다.

 

기타 미세 팁 :

1. using MyType = YourType; 의 경우, <<alias>> 를 사용한다. (e.g. <<alias>> MyType = YourType)

2. 생성자/소멸자의 경우, 특별한 경우가 아니면 굳이 명시하지 않아도 된다.

3. Pure Virtual 함수의 경우, 이탤릭체로 표시한다(e.g. + Exit() : void)

4. Generic 타입의 클래스를 사용할 경우, 템플릿 타입은 점선 박스 안에 넣고, 이를 상속하는 경우 아래 그림과 같이 처리한다(참고 링크).

 

 

시퀀스 다이어그램 (Sequence Diagram)

시퀀스 다이어그램은 특정 행동이 어떠한 순서로 어떤 객체와 어떻게 상호작용을 하는지 표현하는 행위 다이어그램이다(시나리오 파악에 유리).

다이어 그램의 구성 요소들은 크게 세 가지(Lifeline, Activation, Message)로 분류할 수 있다(참고 링크).

이름표시설명

이름
표시
Lifeline
모델링되는 인스턴스를 나타낸다.
Lifeline 은 네모와 점선으로 이루어져 있다. 네모는 객체의 관점에서는 클래스이고, 서비스 관점에서는 컴포넌트이다.
점선은 시간의 경과를 나타낸다.
Activation
Lifeline 의 인스턴스가 다른 인스턴스와 상호작용을 하며 활성화 되어 있는 것을 나타낸다.
Activation은 직사각형의 막대로 Lifeline 점선 가운데에 표시한다.
Message
메시지는 인스턴스 간 주고받은 데이터를 나타낸다. 메시지의 유형은 다음과 같다.


  • 동기 메시지 (Sync message) : 요청을 보낸 후 반환이 올 때까지 대기
  • 비동기 메시지 (Async message) : 요청을 보낸 다음 반환을 기다리지 않고 다른 작업을 수행
  • 자체 메시지 (Self message) : 자기 자신에게 요청을 보냄
  • 반환 메시지 (Reply/Return message) : 요청에 대해 메시지를 반환

흐름 제어

시퀀스 다이어그램은 시간 순으로 인스턴스의 상호 작용을 표현하므로 흐름을 제어하는 표현들을 사용할 수 있다. Guard Sequence Fragment 를 이용하면 된다.

Guard 는 단일 메시지에 대해 조건을 명시할 수 있는 방법으로, 메시지의 앞 쪽에  [ ] 대괄호를 감싼 후 조건을 명시하면 된다.

Sequence Fragment 는 범위로 조건을 명시할 수 있으며, 특정 부분에 대해 메시지를 반복하거나 조건을 명시할 때 사용된다. 아래 표를 참고하자.

이름모양설명

alternative

alternative 는 alt 로 줄여서 사용한다.
alt 는 조건문인 if/else 문을 Guard 를 사용해 표현할 수 있다. 즉, 조건에 따라 선택 사항이 여러 개일 경우 사용한다.
option
option 은 opt 로 줄여서 사용한다.
opt 는 조건문인 if 를 Guard 를 사용해 표현할 수 있다. 즉, 조건에 따라 선택 사항이 단 한 개일 경우에 사용된다.


*opt 와 Guard 의 유사점과 차이점
유사점 : opt 를 사용했는데 처리하는 내용이 1개라면 Guard 와 동일한 효과를 가진다.
차이점 : Guard 는 'A 라면 B 한다' 와 같이 1개에 대해 1가지의 결과를 보여주지만, opt 는 'A라면 B도 하고 C도 하고 D도 하고 등등을 한다' 와 같이 1개에 대해 여러 결과를 나타낼 수 있다.

loop

loop 은 단어 의미 그대로 for, while 과 같은 반복문을 표현한다.
왼쪽의 예시는 날짜가 2022년 10월 12일보다 작을 때 반복문을 실행하라는 의미이다.

parallel

parallel 은 말 그대로 병렬 처리를 의미한다.
왼쪽 예시는 상품 주문이 들어 왔을 때, 상품 확인과 배송 여부 확인을 병렬로 진행하는 것을 표현한 예시이다.

 

Comments