State 란?
- State(상태)는 객체의 생애 주기에서 특정한 단계를 의미한다.
- State는 애플리케이션 객체의 생애 주기 동안 거치는 다양한 시나리오를 표현한다.
- State는 둥근 모서리를 가진 사각형으로 표시되며, 내부에 상태의 이름이 작성된다.
예시.
- 문(door)은 다음 세 가지 상태 중 하나일 수 있다: "Opened", "Closed", "Locked".
- 동시에 "Open", "Close", "Lock", "Unlock"과 같은 이벤트(event)에 반응할 수 있다.
UML에서 State의 유형
1. Simple State
2. Composite State
3. Submachine State (Substate)
예시.
- 다음은 Simple State이다.
- STATE1은 Composite state이다.
- STATE1은 하나의 Region을 가지고 있다.
- STATE1_x는 STATE1의 Substates이다.
- STATE1은 STATE1_x의 Superstate이라고도 한다.
- STATE1, STATE1_2 Composite state이다.
- STATE1, STATE1_2는 하나의 Region을 가지고 있다.
- STATE1_x STATE1의 Substates이다.
- STATE1 STATE1_x의 Superstate라고도 한다.
- STATE1_2는 STATE1_2_0과 STATE1_2_1의 Superstate이다.
- STATE1_x는 STATE1의 'Direct' Substate이다.
- STATE1_2_x는 STATE1의 'Indirect' Substate이다.
State의 구성요소
1. Name compartment
2. Internal activity compartment
3. Internal transition compartment
Internal activity compartment
- 구문 : <behavior lable>/<behavior expression>
- Internal activity label 로 예약된 Keyword들 : entry, exit, do
- entry : State에 진입할 때 한 번 실행됨
- exit : State에서 벗어날 때 한 번 실행됨
- do : State가 유지되는 동안 지속적으로 실행되거나, 특정 연산이 완료될 때까지 실행됨
Transition이란?
Transition(전이)은 상태 간의 변화를 의미하며, 다음 세 가지 요소를 가질 수 있다:
- Trigger : Transition을 유발하는 요소. 신호(signal), 이벤트(event), 특정 조건의 변화, 시간의 흐름 등이 될 수 있다
- Guard : Transition이 실행되기 위해 참이어야 하는 조건
- Effect : Transition이 발생할 때 수행될 동작
- 구문 : <trigger>[<guard>]/</behavior expression>
Transition의 유형
1. External transition
2. Local transition
3. Internal transition
External transition
- 특정 Trigger가 발생하고, Guard 조건이 만족되면 State가 Transition된다.
- Transition은 Source State서 Target State로 향하는 화살표로 표현된다.
External transition 예시.
Trigger 와 [guard], /<behavior expression> 은 optional 구문으로 생략될 수 있다.
External transition에서 동작 실행 순서는 다음과 같다:
- exit action이 가장 내부(innermost) 상태부터 실행됨
- entry action이 가장 외부(outermost) 상태부터 실행됨
Internal transition
특정 Trigger와 Guard 조건이 만족되면 이 실행되지만, State를 벗어나거나 다시 진입하지 않는다.
Internal transition 예시.
Local transition
- Local transition은 반드시 Composite State 내에서만 존재할 수 있다.
Local transition 예시.
Self transitions
하나의 State에서 자기 자신으로 돌아오는 전이를 가질 수 있다. 이는 Transition과 함께 특정한 effect를 수행할 때 유용하다.
State Machine 작성 시 알아둘 것
- doActivity는 State 진입 후 entry Action이 완료된 후 실행된다.
- entry, exit, do는 Transition과 직접 연결될 수 없다.
- 특정 State로의 모든 전이가 동일한 Action을 수행한다면, 공통 Action을 State 내부에서 entry 동작으로 옮기는 것이 좋다.
- 특정 State에서 나가는 모든 Transition 동일한 Action을 수행한다면, 공통 Action을 exit 동작으로 설정하는 것이 좋다.
Event (Trigger)란?
이벤트(Event)는 State Machine에서 Transition을 유발하는 사건이나 자극이다. 이벤트는 State Transition을 일으킬 수 있다.
Event의 구성 요소
1. Signal
2. One or more associated values or parameters (optional)
예를 들어, 키패드에서 숫자 키가 눌리는 것을 이벤트로 볼 수 있으며, 여기에 어떤 숫자가 눌렸는지를 구분하기 위해 파라미터를 사용할 수도 있다.
Pseudo states 와 종류
1. Initial state
2. Choice state
3. Join state
4. Deep history state
5. Shallow history
Initial state
- Region(영역)의 시작 지점을 나타낸다.
- 외부에서 진입할 때, 가장 먼저 들어갈 상태를 결정한다.
- Initial state는 하나의 outgoing transition만 가질 수 있다.
- Initial state의 transition에는 trigger, guard 없이 action만 포함될 수 있다.
Final state
Final state는 내부에 점이 있는 원으로 표시된다.
Choice state
- 다이아몬드 모양의 기호로 표시된다.
- 하나의 incoming transition과 두 개 이상의 outgoing transition을 가질 수 있다.
- 적어도 하나의 guard가 참이어야 하므로, [ELSE]를 사용하는 것이 권장된다.
Junction Pseudo-State
- 여러 개의 transition을 연결하는 데 사용된다.
- 하나 이상의 incoming 및 outgoing transition을 가질 수 있으며, 각 transition에 guard를 적용할 수 있다.
- 동적 조건 분기를 구현하는 Choice state와는 구분된다.
Terminate Pseudo-State
- Terminate pseudo-state에 진입하는 것은 State Machine의 생명 주기가 종료됨을 의미한다.
- 'X' 기호로 표시된다.
History States
- History State는 중단된 상태를 기억하는 데 사용된다.
- 예를 들어, 세탁기가 "Washing", "Rinsing", "Spinning"을 거치다가 정전이 발생하면, "Power Off" 상태로 전이된다. 전원이 복구되었을 때, History State를 통해 마지막 중단된 지점에서 다시 실행될 수 있다.
Concurrent Regions
- 하나의 상태는 여러 개의 substate로 나뉠 수 있으며, 이들 substate는 동시에 실행될 수 있다.
- 예를 들어, "Applying Brakes" 상태에서는 Front Brake와 Rear Brake가 동시에 작동할 수 있다.
- 동시 실행을 위해 fork와 join의 pseudo-states가 사용된다.
출처 :
FastBit Embedded Brain Academy
https://sparxsystems.com/resources/tutorials/uml2/index.html
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
메모리 인터페이스, SDRAM 인터페이스 (0) | 2023.03.20 |
---|---|
Fragmentation을 피하기 위한(안전한) UDP payload size (0) | 2023.03.20 |
터미널 제어문자 ANSI escape code / 터미널에 글자색 배경색 입히기 (0) | 2023.02.20 |
CAN FD 프로토콜 (0) | 2023.02.20 |
YMODEM, XMODEM 프로토콜 (0) | 2023.02.15 |