[디자인 패턴] 전략 패턴 (Strategy Pattern)

조민서·2023년 9월 2일
0

디자인 패턴

목록 보기
1/2

정의

전략 패턴(Strategy Pattern)은 알고리즘군을 정의하고 캡슐화 해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다.
전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.


의도

1. 전략 패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다.

2. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.


적용

예시

  • 오리는 날거나 날지 못하는 상태 (FlyBehavior.interface)
  • 오리가 소리를 내거나 못내는 상태 (QuackBehavior.interface)

→ 오리는 두 가지 상태가 있다.
→ A는 B(알고리즘군)가 있다.
→ 구성 O (Composition), 상속 X

여기서 알고리즘군은 FlyBehavior, QuackBehavior 처럼 상태가 변하는 행동이다.

이렇게 상태가 변하는 행동들을 인터페이스로 두고 인터페이스에 따른 구현체 클래스를 만든 후, 슈퍼 클래스는 이 인터페이스(구현체를 의존성 주입)를 사용한다.

상태가 변하는 행동들을 인터페이스로 두고 인터페이스에 따른 구현체를 만든 후, 슈퍼 클래스는 이 인터페이스를 사용한다.


효과

  • 전략 패턴은 객체 내에서 한 알고리즘의 다양한 변형들을 사용하고 싶을 때, 그리고 런타임 중에 한 알고리즘에서 다른 알고리즘으로 전환하고 싶을 때 사용한다.

  • 전략 패턴은 다양한 행동들을 별도의 클래스 계층구조로 추출하고, 추출된 클래스들을 하나의 인터페이스로 결합하여 중복 코드를 줄인다.

  • 모든 알고리즘을 같은 인터페이스를 구현하는 별도의 클래스들로 추출하여 조건문을 제거할 수 있다.

  • 슈퍼클래스는 알고리즘의 모든 변형들을 구현하는 대신 추출된 객체들 중 하나에 실행을 위임한다. (생성자, 필드, setter 주입)


결과

전략 패턴을 이용하면 슈퍼클래스를 전혀 건드리지 않고 새로운 행동을 추가 할 수 있다. > 행동 패턴

객체지향 원칙

  1. 바뀌는 부분은 캡슐화 한다.
  2. 상속 보다는 구성(Composition)을 활용한다.
  3. 구현보다는 인터페이스에 맞춰서 프로그래밍한다.
profile
블로그 이사 이사했습니돠: https://virtualworld.tistory.com/

0개의 댓글