Sequence Diagram
이 포스트에서는 Sequence Diagram에 대해 다룬다.
Sequence Diagram에 앞서…
Interaction Diagram
- 시스템 내 객체들 간의 상호작용을 구체적인 시나리오로 표현한 다이어그램
- 다양한 상세 수준에서 통신 과정을 설명
- 시스템과 외부 환경 간의 상호작용
- 시스템 내부 구성 요소 간의 상호작용
- 프로세스 간 통신과 프로토콜
- 클래스 수준에서의 통신
Sequence Diagram
-
Interaction Diagram의 일종
- 가로축: 참여자 (lifelines)
- 세로축: 시간의 흐름 (위 → 아래)
- 시나리오 기반, 동적인 객체 간 상호작용 흐름 표현
Sequence Diagram의 예시는 다음과 같다.

Lifeline (생명선)
- Sequence Diagram에서 객체나 역할의 존재와 활동 시간을 나타냄.
- Head of the Lifeline
roleName : Class형식의 직사각형 → 객체 역할과 클래스 명시- 역할 (Roles)는 객체보다 더 일반적인 개념
- 하나의 객체는 여러 역할 수행이 가능함.
- Body of the Lifeline
- 아래로 점선 → 객체의 생애 주기 : 위에서 아래로 내려가며 시간 흐름을 표현
- 실행 구간 (execution specification): 행동을 수행하는 시간대는 굵은 직사각형으로 표현
Message
-
메시지 : Sequence diagram 에서 메시지는 한 객체가 다른 객체에게 어떤 작업을 요청하는 것을 의미함.
-
Send에서 Receive 방향으로 화살표를 통해 표기
Different Lifeline에서는 시간 순서가 맘대로 작용 (독립적임)
메시지 종류
| 메시지 종류 | 설명 |
|---|---|
| Synchronous | 호출 후 응답을 기다림 (msg(p1,p2)) |
| Asynchronous | 호출 후 기다리지 않음 |
| Response | 응답 메시지 (att = msg():val) |
| Object Creation | new 키워드, 생성되는 객체 lifeline 위로 점선 화살표 |
| Object Destruction | × 기호로 객체 소멸 |
| Found / Lost Message | 송신자 또는 수신자가 불분명 |
| Time-consuming Message | 지연이 있는 메시지 표현 가능 |
- Found/ Lost Message
- 어디서 온 메시지인지, 어디로 가야하는 메시지인지 알 수는 없지만, 어떤 객체가 그것을 받았다는/ 보냈다는 사실만 확인한 경우에 사용
- Time-consuming message 특징
- 시간의 흐름에 따라 아래를 포함한 대각선 방향으로 표현
Sequence Diagram Frame
sd diagramName형식의 프레임으로 전체 다이어그램 감쌈
sd란?
- name of the sequence diagram, parameters(optional)
- 상단 왼쪽에 작은 오각형 → 다이어그램 이름 및 매개변수
- Self란 ?
- 하나의 객체가 자기 자신에게 메서드를 호출하거나 작업을 요청하는 메시지
- Java의 ‘this’ 와 비슷
Combined Fragments (제어 구조)
1. alt Fragment
- 조건 분기(if-else)를 표현할 때 사용
- 특정 조건에 따라 여러 가지 메시지 흐름 중 하나만 실행되는 경우를 나타냄.
2. opt Fragment
- 특정 조건이 참일 때만 실행되는 메시지
- 조건이 거짓이면 그냥 아무것도 일어나지 않는다.
- alt Fragment VS opt Fragment
둘 다 if-else 구문처럼 보이지만, 분기 수가 alt는 Multiple , opt는 one이다.
3. loop Fragment
-
특정 조건이나 횟수에 따라 메시지 흐름을 반복 실행하는 구조
- for문, while문처럼 작동함.
- (min, max) 키워드를 통해 반복의 수를 결정함.
- Guard : 특정 메시지나 블록이 실행되기 위한 조건을 명시하는 불리언 조건식
4. break Fragment
- 특정 조건이 만족되면 현재 흐름을 중단(break)하고 해당 메시지 흐름만 단독으로 실행되도록 하는 구조
- break 칸 안에 진행될시에 상위 block도 다 같이 skip함.
5. seq Fragment
- 여러 메시지 흐름을 순차적(Sequentially)으로 실행해야할 때 사용하는 컨테이너로 여러 하위 fragment들을 차례대로 실행하는 구조
- Events on different lifelines은 순서가 아무렇게 올 수도 있다.
6. strict Fragment
- 메시지나 상호작용을 지정한 순서대로 엄격하게(strictly) 실행해야 할 때 사용하는 프레임
- seq fragment에서 다른 fragment와 혼합되면 실행 순서가 모호해질 수 있으므로, strict를 통해 명확한 실행 순서를 보장함.
7. par Fragment
- 여러 메시지 흐름이나 작업이 동시(parallel)에 수행될 수 있음을 나타냄.
- 즉, 병령 처리를 시각적으로 표현하는데 사용함.
8. critical Fragment
-
두 개이상의 병렬 흐름(par)이 동시에 실행되더라도, 특정 블록은 한 번에 하나의 흐름만 접근 가능하도록 상호배제를 적용한 블록
-
병렬 실행중에도 이 블록은 “하나씩만” 실행되도록 보호하는 구역
9. ignore Frament
- 지정한 일부 메시지 이름을 무시(ignore)하고, 다이어그램 해석이나 실행 흐름에서 제외시키는데 사용
- 쉽게 말해, 해당 메시지는 존재하지만 분석이나 시뮬레이션에서는 무시하겠다는 의미
10. consider Fragment
- 지정한 메시지들만 고려하고 나머지 모든 메시지는 무시하는 선택적 분석 블록
- 관심 있는 메시지들만 필터링해서 보여주는 것과 같음.
11. assert Fragment
- 해당 블록 안의 메시지 흐름이 반드시 발생해야한다는 불변조건을 표현
- 시스템이 올바르게 작동하려면, 이 시나리오에서는 반드시 실행되어야 함을 명시.
12. neg Fragment
- 금지된 메시지 흐름 또는 시스템이 절대로 실행하면 안되는 시나리오
- 시스템이 이 흐름을 실행하면 명백한 오류 또는 위반 상황으로 간주함.
요약
| Operator | 설명 |
|---|---|
| alt | 분기 (switch문 유사) |
| opt | 옵션 (if문 유사) |
| loop | 반복 (min, max 조건 가능) |
| break | 예외적 흐름 처리 |
| seq | 약한 순서 |
| strict | 강한 순서 |
| par | 병렬 실행 |
| critical | 중단 없이 원자적으로 수행 |
| ignore | 무시할 메시지 정의 |
| consider | 고려할 메시지 정의 |
| assert | 반드시 발생해야 함 |
| neg | 발생하면 안 되는 상호작용 |
시간 제약 (Time Constraints)
- 특정 이벤트 발생 시점
- 상대적:
after(5sec) - 절대적:
at(12:00)
- 상대적:
- 시간 간격:
{lower..upper} - now : current time
상태 불변 조건 (State Invariant)
- 특정 시점에 객체가 반드시 만족해야 하는 조건
- 조건이 거짓이면 모델 또는 구현이 잘못된 것
기타 상호작용 다이어그램
| 다이어그램 | 설명 |
|---|---|
| Sequence Diagram | 시간 순서 기반, 메시지 흐름 |
| Communication Diagram | 메시지 주고받는 대상 중심 |
| Timing Diagram | 상태 변화 중심 (시간 수평축) |
| Interaction Overview Diagram | 다양한 상호작용 다이어그램의 흐름 표현 (활동 다이어그램 유사) |
주요 표기 요소
| 요소 | 설명 |
|---|---|
| Lifeline | 참여 객체 또는 역할 |
| Combined Fragment | alt, loop 등의 제어 구조 |
| Synchronous Message | 응답 기다림 |
| Asynchronous Message | 응답 없이 진행 |
| Destruction Event | 객체 소멸 (×) |
| Found / Lost Message | 송신자 또는 수신자 불명 |