2023년 6월 19일 작성

State Diagram - 객체의 상태 변화 시각화하기

State Diagram은 객체의 상태 변화를 시각화하는 UML의 한 종류로, 상태, 전이, 선택으로 구성됩니다.

State Diagram의 구성 요소

  • State Diagram은 상태(State), 전이(Transition), 선택(Choice), 시작 상태(Initial state), 종료 상태(Final state)로 구성됩니다.

시작 상태와 종료 상태

stateDiagram-v2
direction LR

[*] --> [*]
  시작 상태 (Initial state) 종료 상태 (Final state)
표기법 속이 채워진 원으로 표기합니다. 속이 채워진 원의 바깥에 다른 원이 둘러싸고 있는 모양으로 표기합니다.
설명 시작 상태는 객체의 상태 변화가 시작되는 곳을 의미합니다. 보통 객체의 생성 시점이 시작 상태가 됩니다. 종료 상태는 객체 상태 변화가 종료되는 곳을 의미합니다. 보통 객체의 소멸 시점이 종료 상태가 됩니다.

상태

stateDiagram-v2

state "State 1" as state1
state "State 2" as state2
state "State 3" as state3
  상태 (State)
표기법 모서리가 둥근 사각형으로 표기합니다. 상태의 이름은 사각형 안에 표기합니다.
설명 상태란 객체가 가질 수 있는 조건이나 상황입니다. 생명 주기 동안 객체의 상태는 변화하며, 상태는 객체의 특정한 속성의 값으로 표현됩니다.

전이

stateDiagram-v2
direction LR

state "State 1" as state1
state "State 2" as state2
state "State 3" as state3
state "State 4" as state4

state1 --> state2
state2 --> state3 : 행동
state3 --> state4 : 행동[조건]
  전이 (Transition)
표기법 전이는 상태와 상태 사이에 화살표가 달린 실선으로 표기합니다. 행동과 조건은 선 위에 표기하며, 필요에 따라 생략할 수 있습니다. 하나의 전이로는 하나의 단방향만 표현할 수 있습니다.
설명 전이란 하나의 상태에서 다른 상태로 변화하는 것이며, 상태 간의 관계를 의미합니다.

선택

stateDiagram-v2
direction LR

state "State 1" as state1
state "State 2" as state2
state "State 3" as state3
state "State 4" as state4
state if <<choice>>

state1 --> state2
state2 --> if : 행동
if --> state3 : 조건 1
if --> state4 : 조건 2
  선택 (Choice)
표기법 마름모로 표기합니다.
설명 조건에 따라 다음 상태가 달라지는 경우에 사용합니다. 전이의 실선 위에 표기하는 조건과 의미가 같습니다.

State Diagram 작성 주의 사항

하나의 객체에 대한 상태 변화를 표현하기

  • 상태에 집중하다 보면, 객체라는 한계를 벗어나는 경우가 있습니다.
  • 하나의 State Diagram은 하나의 객체에 대한 상태를 정의해야 합니다.

Black Hole State 주의하기

  • 들어오는 전이만 있고 나가는 전이가 없는 경우 Black Hole 상태가 됩니다.
  • Black Hole 상태가 있으면, 객체가 종료 상태에 이르지 못하고 무한 loop를 수행하게 됩니다.
  • 상태는 들어오는 전이와 나가는 전이가 모두 정의되어야 합니다.

Example

자동차

  • 행동과 조건은 필요에 따라 생략할 수 있습니다.
---
title: 행동 작성하기
---

stateDiagram-v2
direction LR

state "정지함" as still
state "움직이는 중" as moving
state "충돌함" as crash

[*] --> still
still --> [*]

still --> moving : 운전하기
moving --> still : 운전하기
moving --> crash : 운전하기
crash --> [*]
---
title: 행동 생략하기
---

stateDiagram-v2
direction LR

state "정지함" as still
state "움직이는 중" as moving
state "충돌함" as crash

[*] --> still
still --> [*]

still --> moving
moving --> still
moving --> crash
crash --> [*]

  • 조건은 전이나 선택에 작성할 수 있습니다.
---
title: 조건을 전이에 작성하기
---

stateDiagram-v2

state "돈 없음" as poor
state "돈 적당히 있음" as normal
state "돈 많음" as rich

[*] --> poor : 학교 졸업
poor --> poor : 열심히 일하기 [잔고 100만원 미만]
poor --> normal : 열심히 일하기 [잔고 100만원 이상]

normal --> poor : 일하기 [잔고 100만원 미만]
normal --> normal : 일하기 [잔고 100만원 이상 1000만원 미만]
normal --> rich : 일하기 [잔고 1000만원 이상]

rich --> normal : 놀면서 일하기 [잔고 1000만원 미만]
rich --> rich : 놀면서 일하기 [잔고 1000만원 이상 2000만원 미만]
rich --> [*] : 놀면서 일하기 [잔고 2000만원 이상]
---
title: 조건을 선택에 작성하기
---

stateDiagram-v2

state "돈 없음" as poor
state "돈 적당히 있음" as normal
state "돈 많음" as rich

state ifPoor <<choice>>
state ifNormal <<choice>>
state ifRich <<choice>>

[*] --> poor : 학교 졸업
poor --> ifPoor : 열심히 일하기
ifPoor --> poor : 잔고 100만원 미만
ifPoor --> normal : 잔고 100만원 이상

normal --> ifNormal : 일하기
ifNormal --> poor : 잔고 100만원 미만
ifNormal --> normal : 잔고 100만원 이상 1000만원 미만
ifNormal --> rich : 잔고 1000만원 이상

rich --> ifRich : 놀면서 일하기
ifRich --> normal : 잔고 1000만원 미만
ifRich --> rich : 잔고 1000만원 이상 2000만원 미만
ifRich --> [*] : 잔고 2000만원 이상

Reference


목차