맨위로가기

상태도 (오토마타 이론)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

상태도(State diagram)는 유한 오토마타 이론에서 시스템의 상태와 상태 간의 전이를 시각적으로 표현하는 데 사용되는 유향 그래프이다. 상태도는 정점(상태)과 간선(전이)으로 구성되며, 입력 기호에 따라 한 상태에서 다른 상태로의 변화를 나타낸다. 무어 머신과 밀리 머신은 상태도 표현의 대표적인 예시로, 각 상태와 전이에 출력 기호를 연결하여 동작을 정의한다. 하렐 상태도는 기존 상태 다이어그램의 가독성을 개선한 형태로, UML 상태 머신, 페트리 망, 순서도 등 다양한 확장 및 관련 개념과 비교하여 활용된다.

더 읽어볼만한 페이지

  • 그래프의 응용 - 제어 흐름 그래프
    제어 흐름 그래프(CFG)는 프로그램의 제어 흐름을 추상적으로 나타내는 그래프로, 노드는 기본 블록, 엣지는 제어 흐름 상의 점프를 표현하며, 프로그램 분석 및 최적화, 특히 도달 가능성 분석, 지배 관계 분석, 루프 관리에 유용하게 사용된다.
  • 그래프의 응용 - 케일리 그래프
    케일리 그래프는 군과 생성 집합이 주어졌을 때 군의 원소를 꼭짓점으로, 생성원을 변으로 나타내는 그래프로, 군의 구조를 시각적으로 표현하며 그래프 이론과 군론을 연결하는 도구이다.
  • 그래프 그리기 - 덴드로그램
    덴드로그램은 데이터 분석에서 데이터 포인트 간 계층적 관계를 시각적으로 표현하는 나무 형태의 다이어그램으로, 군집 분석에서 클러스터 간 유사성을 나타내기 위해 활용되며 다양한 분야에 응용된다.
  • 그래프 그리기 - 하세 도형
    하세 도형은 부분 순서 집합의 원소와 피복 관계를 점과 선으로 나타내어 순서 관계를 시각화하는 그래프 도구이며, 격자 이론, 조합론, 소프트웨어 공학 등에서 활용된다.
  • 모델링 언어 - 차트
    차트는 통계 데이터를 점, 선, 도형 등으로 묘사하여 데이터의 규칙성, 경향 등을 시각적으로 제시하고 분석 방향을 제시하는 도표이며, 히스토그램, 막대그래프, 원그래프, 선 그래프 등이 흔히 사용된다.
  • 모델링 언어 - 순서도
    순서도는 컴퓨터 알고리즘이나 프로세스를 시각적으로 표현하는 도구로, 흐름 공정 차트에서 기원하여 컴퓨터 프로그래밍 분야에서 알고리즘을 설명하는 데 사용되며, 다양한 종류와 소프트웨어 도구가 존재한다.
상태도 (오토마타 이론)

2. 역사

상태도는 유한 상태 기계(유한 오토마타라고도 함)를 그래픽으로 표현하는 데 사용된다. 클로드 섀넌과 워런 위버가 1949년에 쓴 저서 ''통신의 수학적 이론''에서 처음 소개되었다.[1] 1967년 테일러 부스가 쓴 ''순차 기계와 오토마타 이론''에서도 상태도의 개념이 발전되었다.

Harel의 Statechart가 객체 지향 방법론 및 표기법에 기여한 점을 보여주는 다이어그램


1987년 컴퓨터 과학자 데이비드 하렐이 Harel statechart를 발명했으며, 변형된 형태가 통합 모델링 언어 (UML)의 일부가 되면서 널리 사용되고 있다. 이 다이어그램 유형은 슈퍼 상태, 직교 영역, 그리고 상태의 일부로서의 활동 모델링을 허용한다.

전통적인 상태 다이어그램은 상태를 정의하는 모든 유효한 파라미터 조합에 대해 별도의 노드를 생성해야 한다. 단순한 시스템을 제외하고는 이로 인해 매우 많은 수의 노드와 노드 간의 전이 (상태 및 전이 폭발)가 발생하여 상태 다이어그램의 가독성을 떨어뜨릴 수 있다. Harel statechart를 사용하면 statechart 내에서 여러 교차 기능 상태 다이어그램을 모델링할 수 있다. 이러한 각 교차 기능 상태 머신은 다른 상태 머신에 영향을 주지 않고 내부적으로 전이할 수 있다. 각 교차 기능 상태 머신의 현재 상태는 시스템의 상태를 정의한다. Harel statechart는 상태 다이어그램과 동일하지만 가독성을 향상시킨다.

3. 유향 그래프

유한 오토마타(FA)의 상태도는 유향 그래프로 표현되며, 다음과 같은 요소(Q, Σ, Z, δ, q0, F)를 갖는다.[2][3]


  • '''정점 Q''': 유한한 상태 집합으로, 원으로 표시하고 안에는 고유한 식별 기호나 단어를 쓴다.
  • '''입력 기호 Σ''': 유한한 입력 기호 또는 식별자 모음이다.
  • '''출력 기호 Z''': 유한한 출력 기호 또는 식별자 모음이다.


출력 함수 ω는 입력 기호와 상태의 순서쌍을 출력 기호에 매핑하는 것으로, '''ω''' : '''Σ''' × '''Q'''→ '''Z'''로 표기한다.

  • '''간선 δ''': 입력에 의해 한 상태에서 다른 상태로 전이되는 것을 나타낸다. 간선은 보통 현재 상태에서 다음 상태로 향하는 화살표로 그린다. 이 매핑은 입력에 의해 발생하는 상태 전이를 설명하며, '''δ''' : '''Q''' × '''Σ''' → '''Q'''로 표기한다. FA 정의에서 δ(전이 함수)는 다이어그램에서 간선으로 연결된 정점 쌍과 간선에 있는 기호로 나타낸다. δ(q, a) = p는 입력 기호 'a'에 의해 상태 'q'에서 상태 'p'로 전이됨을 의미한다.
  • '''시작 상태 q0''': 시작 상태 q0 ∈ Q는 일반적으로 상태를 가리키는 출처가 없는 화살표로 표시된다.[2][4]
  • '''수용 상태(들) F''': 수용 오토마타에서 F ∈ Q는 수용 상태를 의미하며, 보통 이중 원으로 그린다. 때때로 수용 상태는 "'''F'''inal" (정지, 트랩) 상태로 기능한다.[3]


결정적 유한 오토마타(DFA), 비결정적 유한 오토마타(NFA), 일반화된 비결정적 유한 오토마타(GNFA)의 경우, 입력은 각 간선에 표시된다. 무어 머신과 밀리 머신에 대한 자세한 내용은 하위 섹션을 참고한다.

3. 1. 무어 머신 (Moore Machine)

무어 머신은 각 상태에 출력 기호가 연결된 상태 기계이다. 상태 전이도에서 각 상태(원) 안에 출력 기호를 표기한다.

3. 2. 밀리 머신 (Mealy Machine)

밀리 머신은 각 전이(간선)에 입력 기호와 출력 기호가 함께 연결된 상태 머신이다. 상태 전이도에서 각 전이(화살표)는 "입력/출력" 형태로 표시된다. 예를 들어, "1/0"은 입력 기호 "1"을 만나면 출력 기호 "0"을 출력하며 상태가 변경됨을 의미한다.[2][3]

밀리 머신의 상태 전이도는 유향 그래프이며, 다음과 같은 형식을 가진다.

  • 각 변(에지)은 두 상태 사이의 전이를 나타낸다.
  • 각 에지에는 입력과 출력이 함께 표시된다.
  • 각 꼭짓점(노드)은 상태를 나타낸다.


일반적으로 꼭짓점(노드)은 원으로 표시되며, 수용 상태는 이중 원으로 표시한다. ''S''0, ''S''1, ''S''2는 상태를 나타내며, 각 에지에 붙어있는 레이블을 "''j'' / ''k''"로 표기하면 ''j''는 입력을, ''k''는 출력을 나타낸다.[1]

4. 하렐 상태도 (Harel Statechart)



하렐 상태도(Harel statechart)는 컴퓨터 과학자 데이비드 하렐이 발명했으며, 변형된 형태가 통합 모델링 언어(UML)의 일부가 되면서 널리 사용되고 있다.[1] 이 다이어그램 유형은 슈퍼 상태, 직교 영역, 그리고 상태의 일부로서의 활동 모델링을 허용한다.

전통적인 상태도는 상태를 정의하는 모든 유효한 파라미터 조합에 대해 별도의 노드를 생성해야 한다. 단순한 시스템을 제외하고는 이로 인해 매우 많은 수의 노드와 노드 간의 전이(상태 및 전이 폭발)가 발생하여 상태 다이어그램의 가독성을 떨어뜨릴 수 있다. 하렐 상태도를 사용하면 상태도 내에서 여러 교차 기능 상태 다이어그램을 모델링할 수 있다. 이러한 각 교차 기능 상태 머신은 다른 상태 머신에 영향을 주지 않고 내부적으로 전이할 수 있다. 각 교차 기능 상태 머신의 현재 상태는 시스템의 상태를 정의한다. 하렐 상태도는 상태 다이어그램과 동일하지만 가독성을 향상시킨다.

하렐의 상태 전이도(데이비드 하렐이 1987년에 개발)는 하렐 차트라고도 불리며 널리 사용된다. "상위 상태"를 표현하거나, 병렬 상태를 표현할 수 있으며, 상태 내부의 활동을 모델링할 수 있다.

5. UML 상태 머신 (UML State Machine)

UML 상태 머신 다이어그램은 객체 지향 모델링에서 시스템의 동적 동작을 표현하는 데 사용된다. UML 상태 머신은 데이비드 하렐이 발명한 하렐 상태도(Harel statechart)의 변형된 형태로, 슈퍼 상태, 직교 영역, 그리고 상태의 일부로서의 활동 모델링을 허용한다.[1] 이를 통해 복잡한 시스템도 가독성 좋게 표현할 수 있다.

UML 상태 머신 다이어그램의 예


UML 상태 머신 다이어그램의 표준화된 표기법은 다음과 같다.

  • 채워진 원은 시작(START)을 나타낸다. (필수적이지 않음)
  • 속이 빈 원은 정지(STOP)를 나타낸다. (필수적이지 않음)
  • 모서리가 둥근 사각형은 상태를 나타낸다. 사각형 상단에는 상태 이름을, 중간 수평선 아래에는 해당 상태에서 수행될 활동을 기술한다.
  • 화살표는 전이를 나타내며, 괄호([ ]) 안의 식이 참일 때 전이가 발생한다.
  • 굵은 수평선은 여러 개의 전이 화살표를 묶거나 나누는 join/fork를 나타내며, 병렬 상태의 시작과 종료를 의미한다.

6. 확장

흥미로운 확장으로, 여러 상태에서 여러 상태로 화살표(아크)가 흐르도록 허용하는 것이 있다. 이는 시스템이 동시에 여러 상태에 있을 수 있을 때만 의미가 있으며, 이는 개별 상태가 전체적인, 전역 상태의 조건 또는 기타 부분적인 측면만을 설명함을 의미한다. 결과적인 형식은 페트리 망으로 알려져 있다.

또 다른 확장은 하렐 상태도 내에 순서도를 통합하는 것을 허용한다. 이 확장은 이벤트 기반 및 워크플로우 기반 소프트웨어의 개발을 모두 지원한다.

7. 순서도(Flowchart)와의 비교

상태 다이어그램은 순서도와 혼동되기도 한다. 상태 기계는 명시적인 이벤트에 대한 응답으로 작업을 수행하는 반면, 순서도는 작업 완료 시 자동으로 노드에서 노드로 전환된다.[9]

순서도의 노드는 유도된 상태 그래프의 간선에 해당한다.[9] 각 노드가 프로그램 명령을 나타내기 때문이다. 프로그램 명령은 실행될 작업으로, 상태는 아니지만 프로그램의 상태에 적용되면 다른 상태로 전환된다.

소스 코드 목록은 프로그램 그래프를 나타내며, 프로그램 그래프를 실행(구문 분석 및 해석)하면 상태 그래프가 생성된다. 각 프로그램 그래프는 상태 그래프를 유도하며, 프로그램 그래프를 관련 상태 그래프로 변환하는 것을 "펼침"이라고 한다.

프로그램 그래프는 일련의 명령이다. 변수가 없으면 상태는 프로그램 카운터만으로 구성된다. 명령 실행 전 프로그램 카운터 위치는 명령 실행 전 상태이고, 명령 실행 후 프로그램 카운터는 다음 명령으로 이동하여 상태가 변경된다. 따라서 명령 자체는 두 상태 간의 전환이다.

변수가 존재하고 실행되는 프로그램 명령의 영향을 받는 경우, 프로그램 카운터 위치 변경뿐만 아니라 변수 값도 변경될 수 있다. 따라서 같은 프로그램 명령을 다시 방문해도(예: 루프) 프로그램이 동일한 상태에 있다는 의미는 아니다.

전체 상태가 프로그램 카운터인 경우, 프로그램 카운터가 동일한 위치를 가리키면 동일한 상태에 있다. 그러나 상태에 값 변경되는 변수가 포함된 경우, 다른 변수 값으로 동일한 프로그램 위치에 있을 수 있으며, 이는 프로그램의 상태 공간에서 다른 상태를 의미한다. "펼침"이라는 용어는 프로그램 그래프에서 상태 그래프를 생성할 때 이러한 위치의 곱셈에서 유래한다.

자체 전환은 초기 상태와 최종 상태가 동일한 전환이다.

do 루프는 자체 전환의 대표적인 예이다. do 루프는 동일한 증가 명령을 반복 실행하지만, 상태 공간은 사이클이 아닌 선이다. 상태는 프로그램 위치와 증가하는 카운터 값의 조합이기 때문이다. 오버플로가 발생하여 카운터가 다시 0이 되면 초기 상태가 상태 공간에서 다시 방문되어 사이클을 닫는다.

순서도는 어떤 작업의 시작부터 끝까지 진행을 설명하기 때문에 제조업의 조립 라인과 비교할 수 있다. 반면 상태 기계는 일반적으로 이러한 진행에 대한 개념이 없다. 상태 기계의 상태는 처리 단계가 아닌 동작을 지정하는 효율적인 방법이다.

참조

[1] 웹사이트 https://web.archive.[...] "*"
[2] 서적 Sequential Machines and Automata Theory John Wiley and Sons 1967
[3] 서적 Introduction to Automata Theory, Languages, and Computation Addison-Wesley Publishing Company 1979
[4] 서적 Introduction to the Theory of Switching Circuits McGraw-Hill 1965
[5] 논문 Statecharts: A visual formalism for complex systems http://www.wisdom.we[...] 1987-06
[6] 논문 Formal Semantics and Analysis Methods for Simulink Stateflow http://www.csl.sri.c[...] 2002
[7] 논문 A Visual Formalism for Complex Systems http://www.fceia.unr[...] 1987
[8] 논문 Symbolic analysis for improving simulation coverage of Simulink/Stateflow models http://drona.csa.iis[...] ACM 2008
[9] 서적 Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems Newnes



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com