유한상태기계(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 정의 다음번에는 작동하는 예시를 좀 준비해 올게.