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 이나 타입 힌트로 인터페이스를 명시하세요.