Strategy Pattern

Head First Design Pattern 01

Posted by PAPION on June 07, 2020 · 1 min read #DesignPattern

1. Strategy Pattern

스트래티지 패턴(Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.


첫번째 원칙

애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. 바뀌는 부분만 캡슐화하고 시스템의 유연성, 확장성을 높인다.

예를 들면 모든 오리는 수영할 수 있다. 하지만 모든 오리가 날 수 없다. 이 때는 나는 행동을 분리하여 캡슐화 한다.

두번째 원칙

구현이 아닌 인터페이스(상위 형식)에 맞춰서 프로그래밍한다.

  • 구현에 맞춘 프로그래밍
    Dog d = new Dog();
    d.bark();
    
  • 인터페이스/상위 형식에 맞춘 프로그래밍
    Animal animal = new Dog();
    animal.makeSound();
    
  • 더 바람직한 방식
    a = getAnimal();
    a.makeSound();
    

세번째 원칙

상속보다는 구성을 활용한다.

여기서 구성이란, 예를 들어 오리라는 클래스는 FlyBehaviorQuackBehavior의 인터페이스로부터 나는 행동과 꽥꽥거리는 행동을 위임받는 행위를 말한다.
클래스는 행동을 상속받는 대신, 올바른 행동 객체로 구성되어 행동되어야 한다.
이는 캡슐화 뿐만 아니라 동적으로 행동을 바꿀 수도 있게하고, 독립적으로 알고리즘을 변경할 수 있다.