[python] 스트래티지 디자인 패턴
스트래티지 디자인 패턴은 객체지향 프로그래밍에서 자주 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 여러 알고리즘 또는 동작의 집합을 캡슐화하고, 해당 알고리즘을 동적으로 교체할 수 있는 유연성을 제공합니다. 스트래티지 패턴은 다양한 문제에 적용할 수 있으며, 코드의 재사용성과 유지보수성을 높여줍니다.
패턴 구조
스트래티지 패턴은 세 가지 주요 구성 요소로 이루어져 있습니다:
- 스트래티지 (Strategy): 알고리즘을 정의하는 인터페이스입니다. 모든 구체적인 전략 클래스는 이 스트래티지를 구현해야 합니다.
- 구체적인 전략 (Concrete Strategy): 스트래티지를 실제로 구현한 클래스입니다. 여러 개의 구체적인 전략 클래스가 존재할 수 있습니다.
- 컨텍스트 (Context): 전략을 사용하는 클래스입니다. 컨텍스트는 전략 객체를 가지고 있으며, 이를 통해 동적으로 알고리즘을 교체할 수 있습니다.
코드 예제
아래는 파이썬에서 스트래티지 패턴을 구현한 간단한 예제 코드입니다.
# 스트래티지 인터페이스
class Strategy:
def do_something(self):
pass
# 구체적인 전략 클래스
class ConcreteStrategyA(Strategy):
def do_something(self):
print("Strategy A")
class ConcreteStrategyB(Strategy):
def do_something(self):
print("Strategy B")
# 컨텍스트 클래스
class Context:
def __init__(self, strategy):
self.strategy = strategy
def do_something_with_strategy(self):
self.strategy.do_something()
# 사용 예제
strategy_a = ConcreteStrategyA()
context = Context(strategy_a)
context.do_something_with_strategy()
strategy_b = ConcreteStrategyB()
context = Context(strategy_b)
context.do_something_with_strategy()
위의 예제에서는 두 개의 구체적인 전략 클래스 ConcreteStrategyA
와 ConcreteStrategyB
를 정의하고, 이를 컨텍스트 클래스 Context
에서 사용합니다. 컨텍스트 객체는 전략 객체를 가지고 있으며, do_something_with_strategy
메서드를 통해 해당 전략을 실행합니다.
결론
스트래티지 디자인 패턴은 다양한 알고리즘을 유연하게 교체할 수 있는 방법을 제공합니다. 이를 통해 코드의 재사용성과 유지보수성이 향상되며, 객체지향 프로그래밍에서 일반적인 문제를 해결하는 데 도움이 됩니다.
참고 문서: