Strategy

GamSa Ham·2022년 11월 15일
0

GoF디자인패턴

목록 보기
16/22

👀 알고가면 좋은 것들

  • 인터페이스
    • 사람과 컴퓨터를 연결시켜주는 장치
    • 기능에 대한 선언과 구현 분리
    • 기능의 사용 통로
  • 위임( delegate )
    • 어떤 기능을 구현할때 그 책임을 다른 객체에게 떠넘기는 것
    • 다른 객체의 기능을 빌려서 사용하는것

1. 의도

  • 동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화합니다.
  • 또한 이들이 상호교환을 할 수 있도록 합니다.
  • 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 합니다.
  • 여러 알고리즘을 하나의 추상적인 접근점을 만들어 접근 점에서 서로 교환 가능하도록 하는 패턴

2. 활용성

  • 행동들이 조금씩 다를 뿐 개념적으로 관련된 많은 클래스들이 존재할 때, 전략 패턴은 많은 행동 중 하나를 가진 클래스를 구성할 수 있는 방법을 제공합니다.
  • 알고리즘의 변형이 필요할 때, 변형물들이 알고리즘의 상속 관계로 구현될 때 전략 패턴을 사용할 수 있습니다.
  • 사용자가 몰라야 하는 데이터를 사용하는 알고리즘이 있을 때, 노출하지 말아야 할 복잡한 자료 구조는 Strategy 클래스에만 두면 되므로 사용자는 몰라도 됩니다.
  • 하나의 클래스가 많은 행동을 정의하고, 이런 행동들이 그 클래스의 연산 안에서 복잡한 다중 조건문의 모습을 취할 때. 많은 조건문보다는 각각을 Strategy 클래스로 옮겨놓는 것이 좋습니다.

3. 구조

4. 참여자

  • Strategy(Compositor)
    • 제공하는 모든 알고리즘에 대한 공통의 연산들을 인터페이스로 정의합니다.
    • Context 클래스는 ConcreteStrategy 클래스에 정의한 인터페이스를 통해서 실제 알고리즘을 사용합니다.
  • ConcreteStrategy
    • 인터페이스를 실제 알고리즘으로 구현합니다.
  • Context
    • ContextStrategy 객체를 통해 구성됩니다.
    • Strategy 객체에 대한 참조자를 관리하고, 실제로는 Strategy 서브클래스의 인스턴스를 갖고 있음으로써 구체화합니다.
    • 또한 Strategy 객체가 자료에 접근해가는 데 필요한 인터페이스를 정의합니다.

5. 결과

  • 동일계열의 관련 알고리즘군이 생깁니다.
  • 서브클래싱을 사용하지 않는 대안입니다.
  • 조건문을 없앨 수 있습니다.
  • 구현의 선택이 가능합니다.
  • 사용자는 서로 다른 전략을 알아야 합니다.
  • Strategy 객체와 Context 객체 사이에 의사소통 오버헤드가 있습니다.
  • 객체 수가 증가합니다.

6. 구현

  • Strategy 및 Context 인터페이스를 정의합니다.
  • 전략을 템플릿 매개변수로 사용합니다.
  • Strategy 객체에 선택성을 부여합니다.
profile
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.

0개의 댓글