본문 바로가기
Concepts/UML

UML - 상태 기계 다이어그램 - 내부 액티비티와 상태

by ocwokocw 2021. 2. 12.

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

- 상위 상태: https://8thlight.com/blog/micah-martin/2007/04/07/understanding-statemachines-part-4-superstates.html

- 내부 액티비티

이전글에 상태 기계 다이어그램에서는 기본적인 요소들과 주로 상태간의 전이를 중심으로 알아보았다.(ocwokocw.tistory.com/67?category=844459) 전이를 통한 상태변화가 대부분의 경우겠지만 이벤트 발생시 전이 없이 반응하는 경우도 있다. 이때 내부 액티비티(internal activity)를 사용하는데, 상태 상자 속에 이벤트, 가드, 액티비티를 넣는다.

위의 그림은 문자 입력과 도움말에 대한 내부 액티비티를 가지고 있는 상태를 표현한것이다. 내부 액티비티에는 3 가지 종류가 있으며, 각 요소마다 상태(State)간 전이에 사용한 이벤트,가드,액티비티는 같다.

  • 입장 액티비티(entry activity): 상태에 들어올 때 수행되는 액티비티
  • 퇴장 액티비티(exit activity): 상태를 떠날 때 수행되는 액티비티
  • 내부 액티비티(internal activity): 자기 전이(self-transition)과 유사하지만, 내부 액티비티는 입장/퇴장 액티비티를 발생시키지 않는다.

위의 그림에서 do/ 로 시작하는 항목들을 내부 액티비티라고 하였지만 이는 do-액티비티이다. StarUML 에서 내부 전이(internal transition)은 제공하지 않는 것 같다. StarUML 은 https://staruml.io/ 에서 제공하는 유료 버전과 무료버전이 있는데 무료버전이라 없는것 같기도 하다. 원래 내부 전이는 do/ 가 없는 형태여야 한다. /do 의 존재유무에 따른 차이는 다음 활동 상태 Section 에서 기술한다.


- 활동 상태(Activity state)

여태까지는 객체가 이벤트의 발생을 기다렸다. 하지만 객체가 작업을 하는 중인 상태도 있다. 이를 활동 상태(activity state) 라고 한다.

위의 다이어그램에서 검색 상태가 바로 활성 상태인데 앞에 do/ 라서 do-액티비티라고 한다. 검색에서 새 하드웨어 표시 윈도우 상태로 전이되는 부분을 보면 이벤트가 없다. 검색의 do-액티비티가 끝나면 새 하드웨어 표시 윈도우로 곧바로 전이된다. 만약 중간에 취소 이벤트가 발생하면 하드웨어 업데이트 윈도우 상태로 전이된다.

 

사실 이럴거면 그냥 일반 액티비티로 나타내면 되는데 왜 do-액티비티로 표시할까? 이 둘에는 시간적인 차이가 존재한다. 일반적인 액티비티는 순간적으로 일어나서 취소할수가 없는 반면, do-액티비티는 취소를 할 수 있을만큼의 시간이 소요된다는 차이다. 

 

여기서 당연히 의문점을 가져야 한다. 어떤 기준에 의해 어느정도의 시간이 소요되어야 할까? 순간적이라는것은 시스템의 특성에 따라 상대적인 기준이 되므로 시스템의 특성에 따라 활동 상태를 표현하는 의미가 있는가를 따지고 do-액티비티를 사용해야 한다.


- 상위 상태(Super state)

만약 몇 개의 상태가 공통적인 전이와 내부 액티비티를 가진다면 이를 하나하나 다 그려야 할까? 이럴 경우 해당 상태들을 하위 상태로 만들고 공통되는 것을 상위 상태로 만들면 된다.

한 가지 미리 말하자면 위의 다이어그램은 상위 상태를 설명하기 위해 책에 나오는 상위 상태가 포함되어 그려진 다이어그램을 내 뇌피셜로 상위 상태가 없을 때의 다이어그램으로 구성해본것이다. 위의 다이어그램을 절대적인 사실이라 믿지 말고 아래에 나오는 상위 상태가 포함된 다이어그램을 보고 독자가 알아서 위의 다이어그램이 맞는것 같은지 잘 생각해보길 바란다.

 

위에서 각 전화번호 입력, 교환/직통 전화 선택, 이름 입력에서 연결 상태 표시로 취소 전이를 공통적으로 갖고 있는것을 알 수 있다. 이렇게 공통된 전이를 갖고 있음은 상위 상태와 하위 상태로 구성할 수 있는 단서가 된다.

연결 정보 입력이라는 새로운 상위 상태를 추출하면 연결 상태 표시에 대하여 취소 전이는 하나만 표시해도 된다. 또 연결 상태 표시에서 연결 정보 입력으로 새 연결 전이가 되면 시작점(initial state) 부터 다시 시작한다.

 

UML Distilled 도 상위 상태를 충분히 잘 설명하고 있지만 개인적으로 상위 상태로 출처를 표시한 사이트에서 보는것이 더 이해를 잘 돕는다고 생각하여 출처를 추가하였다.


- 동시 상태(Orthogonal state)

상태 들은 동시에 진행되는 다이어그램으로 나뉘어질 수 있다. 원래 직접 그려야 하는데 StarUML 무료버전에서는 아래 그림에서 동시 경계선(concurrent boundary 혹은 orthogonal state) 를 지원하지 않아서 인터넷에서 퍼왔다.

위의 다이어그램에서 CD/라디오, 시각/알람 시각은 동시 선택이 가능하다. 또한 과거 의사 상태(history pseudostate)도 보이는데 이것은 시계가 켜지면 이전에 시계를 off 하였을 때 라디오/CD 중 마지막 선택되었던 상태로 돌아간다는 말이다. 그리고 이 H 와 Palying Radio 가 이어져있는데 이는 내역이 없을때(최초 구동시) Radio 가 기본 선택임을 나타낸다.

댓글