유니티 강좌2014. 3. 19. 06:00

5) Finite State Machine(FSM)


PlayMaker는 비주얼 프로그래밍 방식 중에서 Finite State Machine(FSM-유한 상태 기계)방식의 프로그래밍 기법을 사용합니다. 수학이나 과학에서 사용하는 조금 어려운 개념입니다.


FSM을 쉽게 이해하기 위해 먼저 상태라는 개념을 알아봅시다.

상태란, 시간의 선상 위에서 어떠한 사물이나 존재가 취하고 있는 모양, 형편을 말합니다.


앞서 예를 들었던 자판기의 행동에서 상태를 찾아보자면,

소비자가 돈을 넣어주기를 기다리는 상태가 있고,

돈이 들어왔을 때 돈의 가격을 int 변수에 저장하고 제품들의 버튼 상태를 On시킨 후,

돈이 얼마나 들어 오는지, 많은 돈이 들어오는지,

거스름돈 반환 레버가 돌려지는지 체크하는 상태가 있으며,

제품을 선택한 뒤에 소비자가 또 다른 제품을 선택하는지,

거스름돈 레버를 돌리는지 체크하는 상태가 있습니다.


이러한 각각의 상태들은 상태가 유지되는 동안 해야 될 일들이 있으며, 그 일의 처리에 따라서 어떻게 상태들 간의 흐름이 다음으로 이어질 지가 결정됩니다.

   

이 상태(State)가 특정하게 제한된 것을 유한상태(Finite State)라 하며, 정해진 절차에 따라서 반복적으로 그 일을 수행하는 것을 기계(Machine)라고 합니다. 즉 FSM은 어떤 특정한 상태에서 정해진 일을 수행하는 것을 말합니다.


이것은 플레이메이커가 기존의 텍스트 프로그램이나 다른 비주얼 프로그램과 차별되는 중요한 특징입니다. 논리전개의 방법을 제한함으로써 오히려 분석과 이해를 쉽게 할 수 있습니다. 즉 마음대로(자유도가 높은) 만드는 텍스트 프로그래밍이나 비주얼 프로그래밍과 다르게 플레이메이커는 플로우 차트(Flow chart)처럼 제한된 상태로써 논리를 전개합니다. 이러한 프로그래밍 기법으로 인하여 다른 사람이 봐도 쉽게 이해할 수 있는 효과를 갖게 되는 것입니다.

 

말이 어렵나요? 그림으로 표현하자면 [그림 3-11]과 같습니다.



[그림 3-11]


이처럼 FSM은 각 객체 별로 존재하면서 그 안에 다양한 상태들을 담고 있으며, 각각의 상태들 안에는 그 상태에서 수행해야 하는 액션이 담겨 있습니다.


FSM이 들어있는 객체에 적절한 FSM 구성을 해주는 것도 중요하지만, 상태의 안에 그 상태에서만 수행해야 할 액션들을 구성하는 것도 매우 중요한 일입니다.


예를 들어 앞서 보았던 자판기의 FSM 구조를 처음 만들어보면서 '들어온 돈의 액수를 파악한다.' 라는 상태까지만 만들고 그 안에 필요이상의 액션이 들어가면 어떻게 될까요?


[그림 3-12]

분명히 상태는 들어온 돈의 액수를 파악하는 상태이지만, 그 안에서 액션들이 수행하고 있는 부분은 레버를 돌려서 돈이 나가는 것까지 들어있습니다.


이런 경우, 만약 소비자가 돈을 자판기에 넣었을 경우, 돈이 들어는 순간 프로그램이 액션들을 처리하면서 아래와 같은 일이 일어나게 됩니다.

   

①들어온 돈의 액수를 int 변수에 담고, 제품 버튼들의 FSM을 On 시킨다.

→ 돈의 액수 500을 int에 값에 저장.

제품 버튼들의 FSM On.

   

②돈이 들어오면 Red('int값을 더한다.' 상태)로.

→ ERROR: 이벤트에 연결된 상태가 존재하지 않습니다.

   

③반환 레버가 돌려지면 Blue('돈을 반환한다.' 상태)로.

→ ERROR: 이벤트에 연결된 상태가 존재하지 않습니다.

   

④int값을 체크해서 동일한 값으로 돈을 내보낸다.

→ int값을 체크한다.(int 값은 500이다.)

500원을 내보낸다.

int값을 0으로 변경한다.

   

'돈이 들어오길 기다린다.' 상태에서 돈을 넣는 것을 확인하고 '들어온 액수를 파악한다.' 상태로 들어오는 순간, 회색으로 보이는 글씨들은 에러로 인해 처리되지 못하고 남은 액션들이 프로그램으로 처리됩니다. 결과적으로 말하자면, 자판기에 500원을 넣으면 바로 500원이 반환되어 나오는 상황이 되어버리는 것입니다.


이런 예를 보면서 황당하게 느끼거나, '이런 말도 안 되는 실수를 누가해?' 라고 생각하는 분들이 있을지도 모르지만, 이와 같은 실수는 프로그램을 전문적으로 배워보지 않았거나, 배웠더라도 겉핥기 수준으로 배워본 프로그램의 초보자들이 쉽게 저지르는 오류입니다.


이런 황당한 경우를 겪지 않으려면 상태의 개념을 잘 이해하고, 하나의 상태에서 할 수 있는 행동과 할 수 없는 행동에 대해서 잘 구분 지을 줄 알아야 하며, 그것을 바탕으로 본격적으로 프로그램을 짜기 전에, 설계부터 논리적으로 구상을 해본 후 작업에 착수하는 것이 좋습니다


다음 강좌에서는 PlayMaker 사용에 대해 알아보겠습니다.


APP 개발 온라인 강좌 - 제1강 모바일 개발 환경과 Tool 소개 [1-1]

스마트 앱 개발 학원 국비지원 안내

스카이 아카데미 취업 정보 - 선데이토즈 이야기

미래창조과학부 창조경제 실현

스마트아카데미 책 소개 - 개발자, 나를 말하다

창조경제시대 왜 코딩교육인가 - 스마트 아카데미

스마트아카데미-시설 소개

스마트 앱 전문 교육기관 스마트아카데미가 추천하는 안드로이드앱(1)


Posted by 알 수 없는 사용자