State 패턴은 객체 지향 프로그래밍에서 객체의 내부 상태에 따라 객체의 동작을 변경하는 데 널리 사용되는 디자인 패턴입니다. 이 패턴을 사용하면 메인 클래스를 수정하지 않고도 여러 상태 클래스를 추가할 수 있으므로 디자이너와 개발자에게 다양하고 유연한 옵션을 제공 할 수 있습니다. 이 글에서는 State 패턴의 구성 요소와 이를 C#으로 Unity에서 구현하는 방법을 자세히 살펴보겠습니다.
State 패턴의 구성 요소
State 패턴은 세 가지 주요 컴포넌트, 즉 Context 클래스, IState 인터페이스, ConcreteState 클래스로 구성됩니다. 각 컴포넌트를 자세히 살펴보겠습니다.
Context 클래스
Context 클래스는 State 패턴의 메인 클래스입니다. 클라이언트가 객체의 상태 변경을 요청할 수 있는 인터페이스를 정의하고 현재 상태에 대한 참조를 보유합니다. 이 클래스는 IState 인터페이스와 ConcreteState 클래스 사이의 다리 역할을 합니다.
IState 인터페이스
IState 인터페이스는 ConcreteState 클래스에 대한 구현 계약을 제공합니다. 또한 이 인터페이스는 ConcreteState 클래스가 구현해야 하는 메서드와 프로퍼티를 정의합니다. IState 인터페이스는 Context 클래스에서 ConcreteState 클래스의 Handle 메서드를 호출하는 데 사용됩니다.
ConcreteState 클래스
ConcreteState 클래스는 각 상태에 대한 특정 동작을 구현합니다. 이러한 클래스에는 Context 객체가 호출하여 상태의 동작을 트리거할 수 있는 공용 메서드인 ” Handle”이 있습니다. ConcreteState 클래스는 각 상태에 대한 특정 동작을 제공하는 역할을 담당합니다.
유니티에서 C#으로 State 패턴 구현하기
먼저 Unity에서 C#을 사용하여 State 패턴을 구현해보겠습니다. 다음은 C#을 사용하여 Unity에서 State 패턴을 구현하는 방법의 예시입니다.
먼저 IState 인터페이스를 생성하여 ConcreteState 클래스가 구현해야 하는 Handle 메서드를 정의합니다.
public interface IState
{
void Handle();
}
다음으로 IState 인터페이스를 만들고, 각 상태에 대한 특정 동작을 제공하는 ConcreteState 클래스를 생성하겠습니다.
public class ConcreteStateA : IState
{
public void Handle()
{
// 상태 A의 구현
}
}
public class ConcreteStateB : IState
{
public void Handle()
{
// 상태 B의 구현
}
}
마지막으로 현재 상태에 대한 참조를 보관하고 클라이언트가 객체의 상태 변경을 요청할 수 있는 인터페이스를 제공하는 Context 클래스를 생성합니다.
public class Context
{
private IState _currentState;
public Context(IState initialState)
{
_currentState = initialState;
}
public void Request()
{
_currentState.Handle();
}
public void SetState(IState newState)
{
_currentState = newState;
}
}
유니티의 Start 메소드에서 이를 사용해 보겠습니다.
public class Example : MonoBehaviour
{
void Start()
{
Context context = new Context(new ConcreteStateA());
context.Request(); // 출력: ConcreteStateA 처리
context.SetState(new ConcreteStateB());
context.Request(); // 출력: ConcreteStateB 처리
}
결론
State 패턴은 개발자가 내부 상태에 따라 객체의 동작을 변경할 수 있는 강력한 디자인 패턴입니다. 이 패턴은 세 가지 컴포넌트, 즉 Context 클래스, IState 인터페이스, ConcreteState 클래스로 구성됩니다. Unity에서 C#으로 State 패턴을 구현하는 것은 간단하며, 깔끔하고 유지 관리가 용이한 코드를 만드는 데 유용합니다.
더 공부할 자료 - 개발 능력 다양화를 위한 학습의 필요성
유니티 엔진의 대안으로서, 인디 개발자들에게 선풍적인 인기를 끌고 있는 엔진이 바로 고도 엔진입니다. 혹시 고도 엔진을 배워 보려고 하신다면, 다음의 온라인 강의를 체크해 보시기 바랍니다.