[python] 상태 디자인 패턴
상태 디자인 패턴은 객체의 동작을 객체의 내부 상태에 따라 변경할 수 있는 디자인 패턴입니다. 객체의 상태에 따라 다른 동작이 필요한 경우 상태 디자인 패턴을 사용하여 코드를 깔끔하고 유지보수 가능하게 만들 수 있습니다.
패턴 구조
상태 디자인 패턴은 크게 세 가지 구성요소로 이루어져 있습니다.
- Context(컨텍스트): 상태를 가지고 있는 객체로, 외부에서 상태를 변경할 수 있는 인터페이스를 제공합니다.
- State(상태): 객체의 상태를 표현하는 인터페이스입니다. 각각의 상태에 따라 다른 동작을 수행할 수 있습니다.
- 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
클래스는 상태를 표현하기 위한 추상 클래스입니다. 각각의 구체적인 상태 클래스인 ConcreteStateA
와 ConcreteStateB
는 State
클래스를 상속받아 동작을 구현합니다. Context
클래스는 상태를 변경하고 각 상태에 따른 동작을 호출하는 역할을 합니다.
사용 예시
상태 디자인 패턴은 다양한 상황에 활용될 수 있습니다. 예를 들어 게임에서 플레이어의 상태에 따라 다른 동작을 수행해야 하는 경우, 각각의 상태에 대한 클래스를 만들고 Context
클래스를 통해 상태를 변경하며 동작을 수행할 수 있습니다.
참고 자료
- State Design Pattern - GeeksforGeeks
- Design Patterns: Elements of Reusable Object-Oriented Software - Book by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- Head First Design Patterns - Book by Eric Freeman, Elisabeth Robson, Bert Bates, and Kathy Sierra