본문 바로가기
개발/Architecture & Design Pattern

UML - 상태 다이어그램 (Statechart Diagram)

by 피로물든딸기 2024. 3. 3.
반응형

Architecture & Design Pattern 전체 링크

 

참고

- 상태 다이어그램 그리기

 

상태 다이어그램 (Statechart Diagram)

- 객체나 구성 요소의 다양한 상태, 이벤트에 응답하여 상태 전이를 어떻게 수행하는지를 모델링한다.
동적인 동작을 가진 복잡한 시스템의 행동을 모델링하는 데 사용할 수 있다.

- 시스템이 주고 받는 이벤트를 순서대로 표현할 수 있다.


구성 요소

 

상태 다이어그램(Finite State Machine, Statechart)에는 다음과 같은 구성 요소가 포함된다.

- State : 시스템 또는 객체가 가질 수 있는 다양한 상태를 표시

- Event : 시스템 또는 객체가 상태 변화를 일으키는 사건

- Transition : 상태 간의 변화

 

아래의 다이어그램에서 Source State는 특정 event조건(guard)를 만족하는 경우,

action을 실행하고 Target State로 이동하게 된다.

왼쪽의 circleInitial State가 되고, 오른쪽의 circleFinal State가 된다.

 

state operationentry / do / exit로 나뉜다.

entry는 state에 들어오는 경우 실행하는 action, exit다른 상태로 나갈 때 실행하고 나가는 action이다.

do는 현재 state를 유지하고 있을 때 실행하는 action이다.

 

만약 아래 다이어그램에서 S1 상태로 진입하게 된다면 entry에 의해 x = 1로 설정된다.

그리고 event가 발생한다고 가정하자.

event 조건 x <= 2를 만족하기 때문에 S1 상태에서 exit 하게 되어 x++에 의해 x = 2가 된다.

그리고 eventaction으로 x = x * 2가 되어 x = 4가 된다.

event에 의해 S2 상태로 진입하였으므로, entry x += 5에 의해 최종적으로 x = 9가 된다.


OR State

 

OR State(= Composite State)내부 상태(하위 상태, substate)를 만들어서 그룹화할 수 있다.

이 상태 중 하나의 상태만 active 될 수 있다.

 

아래 다이어그램을 실행해 보자.

 

최초 Initial StateA 상태에서 시작된다.

 

그리고 e1이 발생하면 A exit에 의해 a1, 그리고 transition으로 a2가 실행된다.

e1 BInitial State로 진입(entry a4 실행)하고, substate인 B1.1 상태로 변경된다. (B1.1 entry a6 실행)

 

여기서 e3가 발생하면 B1.1 exit에 의해 a7이 실행되고 B1.2transition 되면서 a8이 실행된다.

B1.2로 진입하였기 때문에 entry a9가 실행될 것이다.

 

최초 A 상태에서 e2가 발생하면 B1.2로 바로 진입한다. (A exit a1 → transition a3 실행)

B1.2로 진입하더라도 B의 entry는 실행되기 때문에 a1 → a3 → a4 → a9 순서대로 action이 실행된다.

(반대로 B1.1에서 A로 다시 돌아가는 경우가 있다면, B1.1exit a7 → Bexit a5를 실행하게 된다.)


AND State

 

AND State(= Orthogonal State)여러 개의 하위 상태를 동시에 가질 수 있다.

하위 상태는 점선을 그어서 표시하고, 화살표의 끝과 상관없이 동시에 실행된다.

아래 다이어그램에서 Initial State 이후 S1, S2, S3 상태를 모두 동시에 가진다.

 

parallelization node로 하위 상태로 fork하고 synchronization node로 상태를 join할 수 있다.


History State

 

History StateShallowDeep History가 존재한다.

 

H : Shallow History, H동일한 하이어라키에 있는 이전 상태의 시작점으로 이동한다.

H* : Deep History, external transition발생하기 바로 전 상태로 돌아간다.

 

History에 도달한 뒤, 이전 상태가 없는 경우라면 History가 가르키는 화살표 방향으로 상태를 변경하면 된다.

 

Shallow vs Deep History 차이는 아래와 같다.

 

아래의 다이어그램에서 G 상태에 있다고 가정하자.

e6가 발생해서 Y 상태로 이동한 후, e7으로 H(Shallow)로 상태가 변경된다면,

H 같은 하이어라키에 있는 B C로 이동할 것이다.

그리고 이전 상태 G C에 포함되므로 C 상태로 변경된다.

반응형

댓글