State 패턴은 객체의 상태에 따라 행동이 달라지는 시스템을 설계하는 방법입니다. 상태를 Enum(열거형)으로 정의하고, 상태에 따라 각기 다른 로직이나 동작을 수행하도록 구성합니다. 이는 코드의 가독성과 유지보수를 높이고, 상태 변화가 명확하게 드러나도록 설계하는 데 매우 유용합니다.
Boolean의 한계
이전 방식에서는 상태를 Boolean 변수로 관리했습니다. 하지만 상태가 많아질수록 Boolean 변수의 개수가 증가하고, 복잡성이 크게 높아집니다. 예를 들어, Attack, Jump, Move와 같은 상태를 각각 Boolean으로 표현하면 상태 간 충돌 가능성이 커지고, 상태를 관리하기 어려워집니다.
독립적인 상태 관리
상태들은 서로 독립적인 존재로 유지되어야 하지만, Boolean 변수로 관리하면 상태 간 의존성이 발생하기 쉽습니다. 예를 들어, Attack 상태일 때 이동을 제한하려면 여러 Boolean 값을 조건문으로 확인해야 하며, 이는 코드의 유지보수를 어렵게 만듭니다.
State 패턴은 Enum 타입을 사용하여 명확한 상태 전환을 제공합니다.
상태를 열거형(Enum)으로 정의합니다.
Idle, Move, Skill
각 상태는 특정 행동을 나타냅니다. 예를 들어, Idle
은 움직이지 않는 상태, Move
는 이동 중인 상태, Skill
은 스킬을 사용하는 상태를 의미합니다.
상태를 저장하기 위한 변수를 생성합니다. 이는 Enum 타입으로 선언되며, 현재 객체가 어떤 상태에 있는지를 나타냅니다.
키 입력, 조건문 등을 통해 상태를 변경합니다.
Move
상태로 전환.Skill
상태로 전환.Idle
상태로 전환.상태에 따라 특정 Flipbook(애니메이션) 또는 동작을 설정합니다.
Switch on Enum
노드를 사용해 각 상태에 따라 다른 Flipbook을 적용합니다.Select
노드를 사용해 코드의 중복을 최소화하고 효율성을 높입니다. 상태 변경은 Event Tick
또는 명시적인 함수 호출을 통해 지속적으로 감지되고 업데이트됩니다. 예를 들어:
Switch on Enum
상태를 Switch
로 처리하여 각 상태에 맞는 행동을 쉽게 정의합니다.
예를 들어, Idle
상태에서는 기본 애니메이션을 재생하고, Move
상태에서는 방향키에 따라 다른 애니메이션을 재생합니다.
Select 노드 활용
중복된 Set Flipbook
코드를 최소화하기 위해 Select
노드를 사용합니다. 이는 상태와 매핑된 Flipbook을 반환하도록 설정되며, 코드의 길이를 줄이고 가독성을 높입니다.
Enum 확장성
새로운 상태(예: Jump, Dash)가 추가되어도 Enum과 Switch 문만 확장하면 됩니다. Boolean 방식보다 훨씬 유연합니다.