본문 바로가기

유니티 개발 정보/개념

유한 상태 기계(Finite State Machines, FSM) #1 (1/3)

원문은 이곳에서 보실수 있습니다.
내용이 길어 총 3편으로 나눠서 올리겠습니다.


튜토리얼의 첫 부분에서,
우리는 유한 상태 기계를 사용하는 이유를 파헤치고,
switch문을 사용하여 이를 구현하는 가장 간단한 방법을
보여줄 것이다. 



Getting in a State?

당신이 작성하는 모든 프로그램은 상태 기계이다. if문을 작성하는 순간에도, 적어도 2개의 상태중 하나를 만든 것이다. - 코드를 작성할수록, 프로그램에는 더 많은 상태가 들어갈 것이다. switch와 if문의 과도한 사용은, 겉으로 이해하기 힘든 이상한 버그들과 함께, 해결방법의 복잡성은 증가하고 컴포넌트간의 상호작용은 예기치 않은 결과를 초래하면서, 감당할 수 없게 될 것이다. 

당신의 프로젝트는 확장하기 어려워 지게 되고, 심지어 개념화하는 것은 더 어려워지게 된다.

이 시리즈의 기본을 형성하는 쿼터니언(Quaternions) 튜토리얼을 작성했을 때, 우리는 의도적으로 코드가 확장되는 것을 가능하게 했다. 마찬가지로 프로토타이핑을 할때, 실제 게임을 위한 기반으로 위와같은 로직을 작성하는 것은 아마 대재앙을 초래할 것이다. 작동은 하지만, 그것은 충분히 생각되지 않았다.
어느 날 우리는 무의미하다는 것을 알게될 것이고, 우리가 그렇게 원했던 AI의 특성은 거대한 리펙토링을 요구할 것이다.

유한 상태 기계는 프로그래밍 스타일의 하나이다. 우리는 당신에게 당신의 게임과 게임안에서 유지할 수 있는 모든 상태에 관해서 생각해보기를 강력히 충고할 것이다.


유한 상태 기계란 무엇인가?

힌트는 유한이란 단어에 있다. 유한 상태 기계를 만들때, 당신은  객체가 사용하는 모든 상태를 명확하게 정의하고, 하나씩 그 상태들 중 하나에 놓여져 있는 객체에 대해서 생각한다.

유한 상태 기계의 관점에서 당신의 프로젝트를 생각해보는 것은  한번에 당신의 머리속에 더 많은 것들을 가질 수 있게하고, 당신이 고안했거나 혹은 당신의 테스터가 요구한 핵심 특징을 구현하기 위한 방향을 더 명확하게 알 수있음으로 인해서, 더 높은 단계에서 당신의 게임을 개념화하는데 도움을 준다.

유한 상태 기계를 사용하여, 상태에 따라 입력을 다르게 처리할 수 있을 것이다. 당신은 다른 알고리즘을 사용하여 객체를 움직이거나, 다른 GUI메시지를 출력할 수 있을지도 모른다.

잠깐, 텔레비전을 생각해보자. - 간소화한 경우를 생각해보자. 텔레비전은 켜거나 끌수 있고, 켜져 있을 때 TV프로그램을 보여주거나,또는 목록를 보여줄 수 있을 것이다.


모드

리모트 컨트롤 기능

Off

  • 오직 전원버튼만이 기능을 가진다.
  • 전원버튼을 누르면 TV를 On상태로 이동한다.

On

  • 전원버튼을 누르면 TV는 Off상태로 이동한다.
  • 채널버튼을 누르면 전송받는 프로그램이 바뀔 것이다.
  • Up/Down 버튼을 누르면 채널을 검색할 것이다.
  • 메뉴 버튼을 누르면 TV는 메뉴상태로 이동할 것이다.

Menu

  • 전원버튼을 누르면 TV는 Off상태로 이동한다.
  • up/down버튼을 누르면 메뉴안에서 이동한다.
  • menu를 누르면 TV은 On상태로 이동한다.

이제, 이들의 상태 안에서 작동하는 로직은 if문같은 몇개의 추가적인 상태를 가질 것이다. 그러나 만약 로직이 복잡하게 시작한다면, 핵심은 그것을 매우 제한되고 빠르게 다른 상태로 이동시키는데 있다.

예를 들어 : 만약 첫번째 메뉴 항목에 있다면, Up버튼을 눌렀을 경우 메뉴를 계속 돌거나 혹은 이전 아이템으로 되돌아 가는 것을 막을려고 할 때, 아마 이를 해결하기 위해 if문을 사용할 것이다.


코드 가독성과 이해는 소프트웨어를 디자인할 때 반드시 사용해야하는 기본적인 요소이다.

끝없이 들쑥날쑥한 if문은 읽기가 어려우며, 실제 발생하고 있는 것들 알아내기 위한 퍼즐로 만들어 버린다.

엄청나게 많은 작은 상태는 코드를 따라는 것과 객체의 가능한 상태를 이해하는 것을 어렵게 만든다.

이 균형을 터득하는 것은 유한 상태 기계 디자인에서 핵심이며, 이 튜토리얼 시리즈가 당신에게 가르쳐주는 것이다.


(다음 글에서 계속)