전략 패턴
객체의 행위를 클래스를 통해 캡슐화하여 동적으로 행위를 변경할 수 있게 해주는 패턴
장점:
- 코드의 유연성 : 서로 다른 알고리즘을 쉽게 교체할 수 있으므로, 코드의 유연성 높아짐
- 재사용성 : 특정 행동(전략)을 별도의 클래스로 분리함으로써 여러 객체에서 재사용
- 런타임에서 전략 선택 : 인터페이스를 통해 다양한 알고리즘(전략)을 구현 가능, 이를 런타임에 선택하거나 교체
단점:
- 클래스 수 증가 : 클래스로 분리하여 클래스의 수 증가함. 이로인해 코드 복잡해짐
- 클라이언트 코드의 복잡성 : 객체 생성 및 관리 로직 추가됨
- 의존성 증가 : 잘못 설계 시 유지보수 어려움
예시 코드
# 전략
class MusicStrategy:
def recommend_song(self):
pass
# 발라드
class Ballad(MusicStrategy):
def recommend_song(self):
return "Recommended Song: Ballad"
# 힙합
class HipHop(MusicStrategy):
def recommend_song(self):
return "Recommended Song: HipHop"
# 컨텍스트 클래스
class User:
def __init__(self, strategy: MusicStrategy):
self._strategy = strategy
def recommend(self):
return self._strategy.recommend_song()
user1 = User(Ballad())
print(user1.recommend()) # 발라드 추천
user2 = User(HipHop())
print(user2.recommend()) # 힙합 추천
'면접을 위한 CS 전공지식 노트 > 1장 디자인 패턴과 프로그래밍 패러다임' 카테고리의 다른 글
MVP 패턴 (0) | 2024.09.10 |
---|---|
MVC 패턴 (1) | 2024.09.06 |
옵저버패턴 (4) | 2024.09.06 |
MVVM 패턴 (0) | 2024.09.05 |