[python] 스트래티지 디자인 패턴

스트래티지 디자인 패턴은 객체지향 프로그래밍에서 자주 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 여러 알고리즘 또는 동작의 집합을 캡슐화하고, 해당 알고리즘을 동적으로 교체할 수 있는 유연성을 제공합니다. 스트래티지 패턴은 다양한 문제에 적용할 수 있으며, 코드의 재사용성과 유지보수성을 높여줍니다.

패턴 구조

스트래티지 패턴은 세 가지 주요 구성 요소로 이루어져 있습니다:

  1. 스트래티지 (Strategy): 알고리즘을 정의하는 인터페이스입니다. 모든 구체적인 전략 클래스는 이 스트래티지를 구현해야 합니다.
  2. 구체적인 전략 (Concrete Strategy): 스트래티지를 실제로 구현한 클래스입니다. 여러 개의 구체적인 전략 클래스가 존재할 수 있습니다.
  3. 컨텍스트 (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()

위의 예제에서는 두 개의 구체적인 전략 클래스 ConcreteStrategyAConcreteStrategyB를 정의하고, 이를 컨텍스트 클래스 Context에서 사용합니다. 컨텍스트 객체는 전략 객체를 가지고 있으며, do_something_with_strategy 메서드를 통해 해당 전략을 실행합니다.

결론

스트래티지 디자인 패턴은 다양한 알고리즘을 유연하게 교체할 수 있는 방법을 제공합니다. 이를 통해 코드의 재사용성과 유지보수성이 향상되며, 객체지향 프로그래밍에서 일반적인 문제를 해결하는 데 도움이 됩니다.

참고 문서: