본문 바로가기
Concepts/UML

UML - 상태 기계 다이어그램

by ocwokocw 2021. 2. 11.

- 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다.

- 상태 기계 다이어그램(State Machine Diagrams)

상태 기계 다이어그램은 시스템의 행동을 기술한다. 객체 지향 접근법에서 단일 객체가 활성인 시간동안 어떤 행동을 하는지 나타내기 위해서 단일 클래스에 대해 그리는 다이어그램이다. 아래와 같은 시나리오에 대해 해보자.

 

금고 자물쇠를 보려면 비밀 양초를 촛대에서 옮겨야 한다. 그리고 문이 닫혀있어야만 자물쇠가 나타난다. 일단 자물쇠가 나타나면 금고를 열기 위해서 열쇠를 꽂는다. 추가적인 안전장치로, 양초를 다시 그 자리에 놓아야만 금고를 열 수가 있다. 만약 도둑이 이 경고를 무시하면 괴물을 풀어서 도둑을 잡아먹도록 한다.

 

각 문장 단위로 이해하기에는 큰 어려움이 없으나, 어떤 이벤트가 일어났을 때 어떤 상태가 되는지 전체적인 상황이 한눈에 그려지지가 않는다. 혹시 머리가 좋은 사람이라면 가능할지라도, 그렇지 않은 다른 사람을 위해서라도 도식화된 형태가 필요할것이다. 이때 상태 기계 다이어그램이 필요하다.

 

상태 기계 다이어그램의 기본적인 구성요소에는 아래와 같은 것들이 있다.

  • 초기 의사 상태(initial pseudostate): 초기의 상태
  • 전이(transition): 한 상태에서 다른 상태로의 이동. 트리거-서명 [가드] / 액티비티 3 부분의 레이블로 구성되어있다.
  • 트리거-서명(trigger-signature): 상태 변화를 유발하는 이벤트
  • 가드(guard): 전이가 이루어지기 위한 Boolean 조건
  • 액티비티(activity): 전이 동안 수행되는 어떤 행동

상태 기계 다이어그램에 익숙하다면 시나리오만 보고 젤 밑에 그림처럼 그릴 수 있을지 모르겠지만, 나는 초보자라서 시나리오를 문장으로 나눈 뒤, 각 문장에서 트리거-서명, 가드, 액티비티를 추출하여 아래 다이어그램을 그렸다.

  1. 금고 자물쇠를 보려면 비밀 양초를 촛대에서 옮겨야 한다.
  2. 그리고 문이 닫혀있어야만 자물쇠가 나타난다.
  3. 일단 자물쇠가 나타나면 금고를 열기 위해서 열쇠를 꽂는다.
  4. 추가적인 안전장치로, 양초를 다시 그 자리에 놓아야만 금고를 열 수가 있다.
  5. 만약 도둑이 이 경고를 무시하면 괴물을 풀어서 도둑을 잡아먹도록 한다.

1번과 2번 문장에서 "비밀 양초를 촛대에서 옮긴다."는 어떤 목적을 위한 이벤트(트리거)이다. "자물쇠가 나타난다." 는 이벤트를 하면 수행되는 어떤 행동이(액티비티)이다. 그리고 "문이 닫혀있어야만"은 이에 대한 조건(가드)이다.

 

3번과 4번 문장에서 "열쇠를 꽂는다." 는 금고를 열기 위한 이벤트(트리거)이다. "금고가 열린다." 는 건 수행되는 행동(액티비티)이며, "양초를 다시 그 자리에 놓아야만"은 이에 대한 조건(가드)이다.

 

5번에서 "도둑이 이 경고를 무시하면"은 하나의 문장 같지만 사실 내포된 의미를 해석해야 한다. "열쇠를 꽂는다." 의 이벤트(트리거)를 수행하는데 "양초를 그 자리에 놓지 않았다." 인 조건(가드)하에서 수행된 결과 수행된 행동(액티비티)이 "괴물을 풀어서" 인것이다.

 

이를 트리거, 가드, 액티비티 목록으로 정리해보면 아래와 같다.

위의 트리거, 가드, 액티비티 목록을 기반으로 상태 기계 다이어그램으로 그리면 아래와 같다. 최종상태는 상태 기계가 끝난것이며, 컨트롤러 객체가 삭제되었다고 할수도 있다.

댓글