본문 바로가기
면접을 위한 CS 전공지식 노트/1장 디자인 패턴과 프로그래밍 패러다임

전략 패턴

by 고구마맛탕먹고싶다 2024. 9. 5.

전략 패턴

객체의 행위를 클래스를 통해 캡슐화하여 동적으로 행위를 변경할 수 있게 해주는 패턴

 

장점:

  • 코드의 유연성 : 서로 다른 알고리즘을 쉽게 교체할 수 있으므로, 코드의 유연성 높아짐
  • 재사용성 : 특정 행동(전략)을 별도의 클래스로 분리함으로써 여러 객체에서 재사용
  • 런타임에서 전략 선택 : 인터페이스를 통해 다양한 알고리즘(전략)을 구현 가능, 이를 런타임에 선택하거나 교체

단점:

  • 클래스 수 증가 : 클래스로 분리하여 클래스의 수 증가함. 이로인해 코드 복잡해짐
  • 클라이언트 코드의 복잡성 : 객체 생성 및 관리 로직 추가됨
  • 의존성 증가 : 잘못 설계 시 유지보수 어려움

예시 코드

# 전략
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