반응형

상태 패턴은, 행동과 상태를 나눈 패턴이다.


행동을 인터페이스로 정의하여, 상태에 따라 행동들을 분류 시킨다.


FSM (Finite-State Machine), 즉 유한 상태 기계에 맞추어 패턴화 시킨 것이다.


FSM은 '유한 상태 오토마타'로도 불리는데, 이는 상태행동들을 노드로 연결시켜 도식화한 것을 말한다.


간단한 예로, 모험가가 있다.


모험가는 휴식, 이동, 먹기, 공격의 4가지 행동을 가지고 있다.


모험가는 배고픔, 싸움, 휴식, 이동, 죽음의 5가지 상태를 가진다.


모험가는 배고픔 상태에서 휴식 행동을 하면 음식을 찾는다.

모험가는 배고픔 상태에서 이동 행동을 하면 움직일 수 없다.

모험가는 배고픔 상태에서 먹기 행동을 하면 식사를 한다. (→휴식 상태)

모험가는 배고픈 상태에서 공격 행동을 하면 싸움에서 져서 죽는다. (→죽음 상태)


모험가는 싸움 상태에서 휴식 행동을 할 수 없다.

모험가는 싸움 상태에서 이동 행동을 하면 도망 갈 수 없다.

모험가는 싸움 상태에서 먹기 행동을 하면 식사를 할 수 없다.

모험가는 싸움 상태에서 공격 행동을 하면 싸움에서 이긴다. (→배고픔 상태)


모험가는 휴식 상태에서 휴식 행동을 하면 계속해서 휴식을 한다.

모험가는 휴식 상태에서 이동 행동을 하면 걷는다. (→이동 상태)

모험가는 휴식 상태에서 먹기 행동를 하면 쉬면서 식사를 한다.

모험가는 휴식 상태에서 공격 행동을 하면 싸움을 시작한다. (→싸움 상태)


모험가는 이동 상태에서 휴식 행동을 하면 휴식을 한다. (→휴식 상태)

모험가는 이동 상태에서 이동 행동을 하면 계속해서 이동한다.

모험가는 이동 상태에서 먹기 행동을 하면 식사를 하며 이동한다.

모험가는 이동 상태에서 공격 행동을 하면 싸움을 시작한다. (→싸움 상태)


모험가는 죽음 상태에서 휴식 행동을 할 수 없다.

모험가는 죽음 상태에서 이동 행동을 할 수 없다.

모험가는 죽음 상태에서 먹기 행동을 할 수 없다.

모험가는 죽음 상태에서 공격 행동을 할 수 없다.


글로 보면 제대로 알아 볼 수 없다.


하지만 FSM을 사용하며 그림으로 표현한다면 쉽게 이해할 수 있을 것이다.


위와 같이 노드로 표현하는 것이 FSM 이다.


이렇게 행동과 상태로 나눈 FSM을 패턴화 시키면 된다.



앞서 말하였듯, 행동을 인터페이스화 시켜야한다.




행동을 인터페이스화 시키고 나면, 행동 클래스를 상속받아서 각 각의 상태 클래스로 구현해주어야 한다.


상태에 따른 행동들을 구현하는 것만 알아두면 된다.



상태 패턴으로 구현시킨 클래스를 사용할 개체를 선언한 뒤, 그 개체에 행동들을 구현하여 사용하면 된다.


그러면 미리 정의해둔 FSM에 따라서 상태에 따른 행동을 한다.



반응형

+ Recent posts