PHpullh

PYTHON · 객체지향

전략 패턴

전략 패턴으로 알고리즘을 캡슐화하고 런타임에 교체할 수 있게 합니다. Python에서는 함수를 전략으로 사용할 수 있습니다.

객체지향고급strategy전략디자인패턴알고리즘

핵심 설명

전략 패턴으로 알고리즘을 캡슐화하고 런타임에 교체할 수 있게 합니다. Python에서는 함수를 전략으로 사용할 수 있습니다.

Python code

from typing import Callable

# 함수 기반 전략
def bubble_sort(data: list) -> list:
    arr = data[:]
    for i in range(len(arr)):
        for j in range(len(arr) - 1 - i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

def quick_sort(data: list) -> list:
    if len(data) <= 1:
        return data
    pivot = data[0]
    left = [x for x in data[1:] if x <= pivot]
    right = [x for x in data[1:] if x > pivot]
    return quick_sort(left) + [pivot] + quick_sort(right)

class Sorter:
    def __init__(self, strategy: Callable = sorted):
        self._strategy = strategy

    def sort(self, data: list) -> list:
        print(f"전략: {self._strategy.__name__}")
        return self._strategy(data)

    def set_strategy(self, strategy: Callable):
        self._strategy = strategy

sorter = Sorter(bubble_sort)
print(sorter.sort([3, 1, 4, 1, 5]))

sorter.set_strategy(quick_sort)
print(sorter.sort([9, 2, 6, 5, 3]))

학습 팁

Python에서는 클래스 대신 함수를 전략으로 사용하면 더 간결합니다.

주의할 점

전략 함수의 시그니처가 일치하지 않으면 런타임 에러가 발생합니다. Protocol이나 타입 힌트로 인터페이스를 명시하세요.

자주 묻는 질문

전략 패턴란 무엇인가요?

전략 패턴으로 알고리즘을 캡슐화하고 런타임에 교체할 수 있게 합니다. Python에서는 함수를 전략으로 사용할 수 있습니다.

전략 패턴 학습 시 주의할 점은 무엇인가요?

전략 함수의 시그니처가 일치하지 않으면 런타임 에러가 발생합니다. Protocol 이나 타입 힌트로 인터페이스를 명시하세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.