[python] 상태 디자인 패턴

상태 디자인 패턴은 객체의 동작을 객체의 내부 상태에 따라 변경할 수 있는 디자인 패턴입니다. 객체의 상태에 따라 다른 동작이 필요한 경우 상태 디자인 패턴을 사용하여 코드를 깔끔하고 유지보수 가능하게 만들 수 있습니다.

패턴 구조

상태 디자인 패턴은 크게 세 가지 구성요소로 이루어져 있습니다.

  1. Context(컨텍스트): 상태를 가지고 있는 객체로, 외부에서 상태를 변경할 수 있는 인터페이스를 제공합니다.
  2. State(상태): 객체의 상태를 표현하는 인터페이스입니다. 각각의 상태에 따라 다른 동작을 수행할 수 있습니다.
  3. ConcreteState(구체적인 상태): 상태의 구현체로, 실제로 동작을 수행합니다.

예시 코드

아래는 파이썬으로 작성된 상태 디자인 패턴의 예시 코드입니다.

from abc import ABC, abstractmethod

class State(ABC):
    @abstractmethod
    def handle(self):
        pass

class ConcreteStateA(State):
    def handle(self):
        print("상태 A에서 수행하는 동작")

class ConcreteStateB(State):
    def handle(self):
        print("상태 B에서 수행하는 동작")

class Context:
    def __init__(self):
        self.state = ConcreteStateA()

    def change_state(self, state):
        self.state = state

    def request(self):
        self.state.handle()

# Example usage
if __name__ == "__main__":
    context = Context()
    context.request()  # 상태 A에서 수행하는 동작

    context.change_state(ConcreteStateB())
    context.request()  # 상태 B에서 수행하는 동작

위의 코드에서 State 클래스는 상태를 표현하기 위한 추상 클래스입니다. 각각의 구체적인 상태 클래스인 ConcreteStateAConcreteStateBState 클래스를 상속받아 동작을 구현합니다. Context 클래스는 상태를 변경하고 각 상태에 따른 동작을 호출하는 역할을 합니다.

사용 예시

상태 디자인 패턴은 다양한 상황에 활용될 수 있습니다. 예를 들어 게임에서 플레이어의 상태에 따라 다른 동작을 수행해야 하는 경우, 각각의 상태에 대한 클래스를 만들고 Context 클래스를 통해 상태를 변경하며 동작을 수행할 수 있습니다.

참고 자료