[python] 스트래티지 패턴

스트래티지 패턴은 소프트웨어 공학에서 종종 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 알고리즘을 캡슐화하고 이를 동적으로 교체할 수 있는 방법을 제공합니다. 스트래티지 패턴을 사용하면 알고리즘을 실행하는 코드와 알고리즘 자체를 개별적으로 다룰 수 있으며, 이를 통해 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.

스트래티지 패턴의 구성 요소

스트래티지 패턴을 구현하는데는 세 가지 주요 요소가 있습니다.

  1. 컨텍스트(Context): 알고리즘을 사용하는 객체로, 알고리즘을 실행하는 메서드를 포함합니다.
  2. 스트래티지(Strategy): 알고리즘을 나타내는 인터페이스 또는 추상 클래스입니다. 모든 스트래티지는 동일한 인터페이스를 구현해야 합니다.
  3. 구체적인 전략(Concrete Strategies): 스트래티지 인터페이스를 구현하는 실제 알고리즘 클래스입니다.

스트래티지 패턴의 예시

다음은 스트래티지 패턴의 간단한 예시입니다. 가장 일반적인 예로는 정렬 알고리즘을 들 수 있습니다. 컨텍스트는 정렬 알고리즘을 실행하는 메서드를 가지고 있고, 스트래티지는 다양한 정렬 알고리즘을 나타내는 인터페이스입니다. 각각의 구체적인 전략은 실제 정렬 알고리즘을 구현하는 클래스입니다.

class Context:
    def __init__(self, strategy):
        self.strategy = strategy
    
    def execute_strategy(self, data):
        self.strategy.sort(data)
        
class Strategy:
    def sort(self, data):
        pass
    
class BubbleSortStrategy(Strategy):
    def sort(self, data):
        # Bubble sort algorithm implementation
        pass
    
class QuickSortStrategy(Strategy):
    def sort(self, data):
        # Quick sort algorithm implementation
        pass

# Usage
data = [5, 2, 7, 1, 3]
context = Context(BubbleSortStrategy())
context.execute_strategy(data)

위의 예시에서는 BubbleSortStrategy와 QuickSortStrategy가 스트래티지를 구현하는 클래스입니다. Context 클래스는 선택한 스트래티지에 따라 데이터를 정렬하는 메서드를 실행합니다.

스트래티지 패턴의 장점

스트래티지 패턴의 한계

참고 자료