상태 다이어그램

상태 다이어그램

상태 다이어그램에서 말하는 상태란, 객체가 존재할 수 있는 조건 중 하나를 말한다.

그리는 방법은 모서리가 둥근 사각형으로 표시하고 안쪽 상단에 상태 이름을 기술한다.

이 다이어그램에는 객체가 가질 수 있는 가능한 모든 경우가 상태로 파악되어야 하고, 특정 순간에는 오직 한 가지 상태만 존재할 수 있다.

이 외에도 다이어그램을 그리는데 알아야 할 것들이 조금 있다.

 

 

 

전이

위의 상태 표현을 보면 time over라는 이벤트에 의해 세탁 상태에서 정지 상태로 전이됐다.

여기서 전이란, 객체의 상태가 다른 상태로 변경되는 것을 말하며 실선으로 표기한다.
이벤트는 객체의 전이를 유발하는 자극을 의미하며 전이 위에 표시한다.

 

 

 

확장

위의 둥근 사각형으로 표시된 상태 아이콘들은 아래와 같이 더 확장되어 표기될 수 있다.

상태와 이벤트 표기를 실선 위가 아니라, 이렇게 따로 두 영역으로 나누어 정보를 상세하게 표현할 수 있다.

 

 

이 방법 외에도 전이를 나타내는 선 위에 추가로 정보를 넣을 수 있다.

이 방법은 이벤트와 동작으로 표현되며 슬래시/를 사용하여 구분한다.
(시작 상태와 종료 상태를 위 그림처럼 표현함)

 

 

 

액티비티

상태 다이어그램에는 액티비티라는 것이 있는데
액티비티란, 시스템이 어떤 상태에 있을 때 발생하는 것을 말한다.

 

발생하기 위해서는 일정 시간이 걸리고, 액티비티가 완료된 응답으로 어떤 상태에서 빠져 나오는 트랜지션이 이루어진다.

 

 

그래서 우리는 이러한 표현 방식을 갖는 상태 다이어그램을 주로 다음과 같은 상황에서 사용한다.

  1. 객체의 상태 변화를 상세히 분석할 때(생성, 소멸 기간 중)
    즉, 객체의 동적 상태 변화를 정의하고 분석하는 목적으로 사용한다.
  2. 이벤트에 의한 객체의 반응을 분석
  3. 객체의 속성이나 동작을 검증.
    객체의 상태는 속성 값으로, 이벤트는 대부분 객체의 동작으로 정의된다. 여기서 적합성을 검증할 수 있다.

 

 

 

이 특징을 종합하여 예를 한 가지 들어보자.

우선, 초기 상태를 확인해야 한다.
시작 상태, 전이, 첫 번째 상태를 파악하자.

 

여기서 이벤트는 pain이고, 동작은 visit>=1 이다.

 

 

 

 

이제 다음으로 초기 상태에서 전이와 이벤트, 전이할 새로운 상태를 점점 추가해나가면 된다.

 

 

 

 

 

추가 개념

 

 

슈퍼 상태, 서브 상태

상태 다이어그램에선 높은 관점과 낮은 관점을 각각 슈퍼 상태서브 상태로 표현한다.
여기서 높은 관점이란 모델의 단순화를 의미하고, 낮은 관점은 문제의 세세한 부분에 초점을 맞추는 것을 말한다.

이 관점들을 바탕으로 다시 말하자면

슈퍼 상태는 복잡한 상황을 높은 관점에서 표현한다.
주로 세세한 내용보다는 크고 일반적인 문제에 초점을 맞춘다.

서브 상태는 확장된 슈퍼 상태 내부에 있다.
상태 안에서 세부 항목을 낮은 관점으로 본다.

 

 

 

 

제어의 분리 동시성

제어의 분리는 하나의 전이를 기반으로 다수의 작업을 진행하는 것을 말한다.

제어의 분리가 일어나면 전이 하나가 여러 상태 또는 서브 상태를 가리키는 다수의 화살표로 나뉜다.
반대로 제어의 합병 또한 동기화 막대를 가리키는 다수의 전이 화살표로 모델링 될 수 있다.

전이 이벤트에 의해 객체가 두 가지 서브상태로 나뉘어 동시에 수행하는 모습이다.

 

 

위에 동시에 수행한다는 말에서 눈치챘겠지만,
동시성은 슈퍼 상태 내부를 필요한 만큼 나누고, 그 분리된 영역에 서브 상태 다이어그램을 그리는 것을 말한다.

 

 

 

 

 

상태 다이어그램 예시

마지막으로 공기청정기의 상태 다이어그램 예시이다.

  1. 공기청정기의 전원을 켜면, 이벤트에 의해 기본 설정으로 초기화 상태가 됨
  2. 초기화 상태에서 작동 상태로 전이
  3. 작동 상태에서 공기 정화 후 대기 이벤트에 의해 대기 상태로 전이
  4. 대기 상태에서 공기 측정 후 정화 기능 작동 이벤트에 의해 작동 상태로 전이
  5. 작동 상태에서 전원을 끄면, 이벤트에 의해 정지 상태로 전이되고 시스템이 종료