brunch

You can make anything
by writing

C.S.Lewis

by 쑹이씨 May 12. 2024

유한상태기계(FSM)

#2 Moore machine

FSM은 상태변화를 많이 다루는 서비스를 만들어야 하는 개발자에게는 도움이 될 거라 생각해.


FSM은 크게 Mealy machine과 Moore machine이 있는데, 개인적으로는 무어가 더 강건한 거 같아.


그래서 무어머신을 설명하려고 ㅎ


아래는 위키피디아에서 퍼온 거야. 출처

FSM의 일종인 Moore machine의 정의

S : 상태전체

s0 : 시작상태

Σ: 입력 전체 (이벤트)

O : 출력 전체

δ : 전이 관계

G : 상태와 짝지어진 출력

이 6개의 묶음이 하나의 FSM이라는 얘기야.


사실 놀랍게도 지난 글에서 테이블 하나로 S, s0,Σ,δ 는 한 번에 정의가 되었어. (s0은 null)

남은 건 출력에 해당하는 O와 G인데.. 이건 무슨 의미일까? 일단 테이블로 표현은 해볼게.

출력의 표현

지난 글에서 전이될 때 함수도 실행할 수 있다고 했지? 그게 출력이야. 어떤 상태에 진입할 때마다 해당하는 출력이 나오는 게 무어머신이야.


개발자라면 뭔가 꼬인 느낌이 들 거야. 출력이라니?

출력은 상태 아니었어?


무어머신은 1956년에 논문으로 발표가 된 거야.

그래서 좀 더 전자공학의 관점에서 이해해야 돼.

전자공학에서의 입력과 출력은 전류가 흐르냐 안 흐르냐이거든.


입력핀 3개와 출력핀 2개가 있으면, 8가지의 입력과 4가지의 출력이 가능하겠지?

전자회로의 예시
전자회로의 입출력 진리표 예시

그래서 출력이라는 건 결국 작동을 의미하는 거거든.

프로그래밍의 관점에서는 함수의 실행이야.


지난번에 그렸던 상태다이어그램
출력이라는 말을 진입액션이라 생각하자.

GIFT라는 이벤트가 발생하면, 그냥 done상태가 될 뿐이었는데, 진입액션을 설정해 주면 실제로 지급도 시킬 수 있겠지?

무어머신은 발생한 이벤트로 전이하고, 진입액션을 실행한다.

난해한 수식에서 시작했지만, 사실은 아래와 같이 2개의 테이블을 정의하면 FSM을 정의한 거야. 이해되는 사람은 댓글을 좀 달아줘 ㅎㅎ

FSM정의
ACTION 정의

다음번에는 작동하는 예시를 좀 준비해 올게.


작가의 이전글 유한상태기계 (Finite state machine)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari