Dev ETC/UML2009. 2. 18. 22:22

어린 아이가 감기에 걸리는 상황을 아래와 같이 생각해 봅시다.

보통 상태에서 추위에 떨게 되면 감기가 걸린 상태로 상태가 전이됩니다.

감기가 걸린 상태에서 체온이 37도 이상 올라가면 해열제를 먹입니다.

감기가 걸린 상태에서 체온이 39도 이상 올라가면 병원 응급실로 갑니다.

감기가 걸린 상태에서 사망 상태로 전이하기도 합니다.

감기가 걸린 상태에서 보통 상태로 전이 합니다.

이렇게 어떤 하나의 객체가 가질 수 있는 상태(보통 상태/감기 걸린 상태/사망
상태)와 상태의 전이, 전이를 유발시키는 사건(추위), 그리고 해당 상태에서 행할 수
있는 액션(해열제 먹이기, 응급실 가기)을 설명한 모델이 스테이트 차트 다이어그램
(State chart Diagram)입니다.

스테이트 차트 다이어그램은 위와 같이 상태의 변화가 복잡한 객체를 대상으로
작성합니다. 지금부터 스테이트 차트에 대해 알아 봅시다.

 
 
1.개요
 

스테이트차트 다이어그램은 "하나의 객체를 대상으로 생존기간 동안 가질 수 있는
객체 상태의 변화를 분석
한 다이어그램"입니다.

스테이트차트 다이어그램은 객체 상태와 함께 객체 상태 변화를 유발하는 이벤트와 동작
(Action/Activity)도 함께 정의합니다. 이러한 요소가 정의된 스테이트차트 다이어그램을
통해 "객체 O는 이벤트 E에 의해 상태 S로 변화하고 그 상태에서 A라는 행위를 한다" 라는
식의 분석을 수행할 수 있습니다.

스테이트차트 다이어그램을 작성하는 목적과 용도는 다음과 같습니다.

객체의 상태변화를 상세히 분석합니다.

스테이트차트 다이어그램은 객체 하나를 대상으로 생성-소멸기간중에 다양하게
가질 수 있는 상태(State)를 분석하는 목적으로 작성됩니다. 정보시스템에서 많은
객체는 생성되어 소멸될 때까지 간단한 상태를 가지지만 일부는 매우 복잡한 상태로
변화하면서 존재합니다. 스테이트차트 다이어그램은 이렇게 객체의 동적 상태변화를
정의하고 분석하는 목적으로 사용합니다.

event에 의한 객체의 반응을 분석합니다.

스테이트차트 다이어그램은 객체 상태 변화를 유발하는 이벤트를 정의하고 분석하는
목적으로도 작성됩니다. 객체의 상태는 그냥 변하는 것이 아니라 이벤트에 의해
변화합니다. 이러한 객체의 상태변화를 유발하는 이벤트를 식별하고 상세히 정의합니다.

객체의 속성이나 오퍼레이션을 검증합니다.

스테이트차트 다이어그램은 객체가 가지는 속성과 오퍼레이션을 검증하는 목적으로
작성되기도 합니다. 스테이트차트 다이어그램에서 분석대상인 객체의 상태는 속성의
값으로 정의되고, 이벤트는 대부분 객체의 오퍼레이션으로 정의됩니다. 따라서
클래스 다이어그램 등에서 정의된 클래스의 속성과 오퍼레이션의 적합성을 검증할 수
있습니다.

스테이트차트 다이어그램을 작성하는 시기는 한정해서 정하기가 어렵습니다만, 보통
클래스가 정의된 후, 즉 클래스 다이어그램과 시퀀스 다이어그램이 작성된 후에
스테이트차트 다이어그램이 작성됩니다.

스테이트차트 다이어그램을 작성하기 위한 준비물은 업무 분석자료와 클래스 다이어그램,
시퀀스 다이어그램 등입니다.

2. 구성요소
 

스테이트차트 다이어그램의 구성요소는 다음과 같습니다.



 

시작 상태와 종료 상태의 표기와 의미는 다음과 같습니다.

 

표기

의미

시작 상태

시작점은 속이 꽉 채워진
원으로 표기

시작 상태는 객체의 상태변화가
시작되는 곳
을 의미합니다.
보통 객체의 생성시점이
시작상태가 됩니다.

종료 상태

속이 채워진 원에 바깥의
또 다른 원이 둘러싸고 있는
모양으로 표기

종료 상태는 객체 상태변화가
종료하는 곳
을 의미합니다.
보통 객체의 소멸시점이
종료상태가 됩니다.

 

상태의 의미

상태란 객체가 가질 수 있는 조건이나 상황입니다.

생명주기 동안 객체의 상태는 변화하며, 상태는 객체의 특정한 속성의 값으로

표현됩니다.

예) 자동차 객체의 상태 : "주차" , "주행" , "정차" , "수리"

표기법

기본형 표기

상세형 표기

모서리 둥근 사각형으로

표기

상태 명은 심볼 내에 표기

수평으로 구분된 모서리 둥근 사각형으로

표기

상태 명은 위쪽부분에, 동작과 그 외의 부분은

아랫 부분에 표기

진입 동작(Entry Action)

상태에 들어올 때 수행되는 동작을 정의합니다.

탈출 동작(Exit Action)

상태에 나갈 때 수행되는 동작을 표기합니다.

내부전이(Internal Transition)

현재 상태에서 처리할 수 있는 이벤트가 발생할 경우 상태를 떠나지 않고
해당 사건을 처리하는 경우입니다.

 

활동(Activity/Action)

현 상태에서 수행할 동작을 표현합니다.

지연 사건 (Deferred event)

현 상태를 빠져 나갈 때 발생한 것처럼 그 효과를 지연시킨 이벤트입니다.
위 예에서 Tracking 상태에서 selfTest 이벤트가 발생하면 이것을 메시지
큐에 저장 했다가, Tracking 상태에서 벗어나는 순간 이벤트가 활성화
됩니다.

전이의 의미

전이란 하나의 상태에서 다른 상태로 변화하는 것이며 상태 간의 관계를 의미합니다.

표기법

전이는 상태와 상태 사이에 화살표가 달린 실선으로 표기합니다.

선 위에는 촉발사건(Event Trigger), 조건(Condition), 동작(Action)이 차례로

표기됩니다.

위 세 가지 표기내용은 각각 생략될 수 있습니다.

원래 상태(Source State)

전이가 실행되기 전의 객체 상태

촉발 사건(Event Trigger)

전이를 촉발시키는 사건

전이 조건(Condition)

전이 촉발 시에 검토되는 Boolean 식 (참일 경우에만 전이가 수행됨)

동작(Action)

전이 도중 실행되는 행위 또는 오퍼레이션

 

목표 상태(Target State)

전이가 완료된 후의 객체 상태

 
4. 작성단계 및 주의사항

작성 대상 객체를 선정합니다.

스테이트차트 다이어그램의 작성대상 객체를 선정합니다.
스테이트차트 다이어그램에서 분석할 객체는 다소 복잡한 상태변화를 가지는
객체입니다.

객체가 가지는 상태를 정의하여 나열합니다.

객체의 생명주기를 분석하면서 어떤 상태를 가지는 지를 먼저 식별합니다.
식별된 상태는 여러 번의 검토를 통해 합쳐지거나 더 상세한 것으로 분리됩니다.

상태와 상태간 전이(Transition)를 정의합니다.

하나의 상태를 기준으로 해서 전이할 수 있는 상태를 정합니다.
전이는 모든 상태에 연결되어야 합니다. 또 보통의 경우 어떠한 상태에서도 전이를
통해 종료점까지 도달할 수 있어야 합니다.

전이와 상태의 상세한 부분을 정의합니다.

전이의 경우 촉발 사건(Event Trigger), 전이 조건(Condition), 동작(Action)등을
정의하고, 상태의 경우 진입 동작(Entry Action), 탈출 동작(Exit Action), 내부전이
(Internal Transition), 활동(Activity/Action), 지연 사건 (Deferred event)들을
정의합니다. 상황에 따라 이러한 상세내용들의 정의는 생략하거나, 필요한 것만을
정의하고 넘어갈 수도 있습니다.

다음은 스테이트 차트 다이어그램 작성시 주의사항입니다.

객체 하나에 대한 상태 변화를 표현합니다.

스테이트차트 다이어그램의 작성 중에 상태에 집중하다 보면 객체라는 한계를
벗어나는 경우가 종종 있습니다. 객체 하나의 상태변화와 여기에 관계된 이벤트들을
모델링하다는 본질에서 벗어나면 안됩니다.

블랙홀 상태(State)를 주의합니다.

스테이트차트 다이어그램에 표현된 상태는 들어오는 전이와 나가는 전이가 모두
정의
되어야 합니다. 만약 들어오는 전이만 있고, 나가는 전이가 없을 경우, 그 상태는
블랙홀이 됩니다. 이런 실수를 하면 객체가 종료 상태에 이르지 못하고 무한 루프를
수행하는 오류를 범하게 됩니다. 항상 모델을 끝내면 이런 실수가 있지 않나 검증해야
합니다.

클래스 다이어그램 및 시퀀스 다이어그램과의 일관성에 유의합니다.

스테이트차트 다이어그램을 작성 완료한 후 새롭게 정의된 오퍼레이션과 속성은
클래스 다이어그램와 시퀀스 다이어그램에 반영되어 일관성을 유지해야 합니다.
그런 작업을 하지 않을 경우, 모델들을 전체적으로 신뢰할 수 없게 됩니다.

Posted by Huikyun