본문 바로가기

디자인 패턴

디자인 패턴 - 전략 패턴(Strategy Pattern)

1. 정의

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

2. 예시

  • 오리가 소리 내는 행동을 수정하고 싶다.

3. 그림

4. 클래스 다이어그램

5. 코드

public class Client{
    // 꽥 소리가 나는 행동을 사용하고 싶을 때
    QuckBehavior behavior = new Quack();
    behavior.quck(); // 꽥

    // 삑 소리가 나는 행동을 사용하고 싶을 때
    QuckBehavior behavior = new Squeak();
    behavior.quck(); // 삑

    // 소리를 내고 싶지 않을 때
    QuckBehavior behavior = new MuteQuack();
    behavior.quck(); // 소리를 내지 않음
}
public interface QuackBehavior{
    public void quck();
}
public class Quack implements QuackBehavior{
    public void quack(){
        System.out.println("꽥");
    }
}
public class Squeck implements QuackBehavior{
    public void quack(){
        System.out.println("삑");
    }
}
public class MuteQuack implements QuackBehavior{
    public void quack(){
        System.out.println("소리를 내지 않음");
    }
}

6. 설명

  • 소리가 나는 행동을 Quack, Squeck, MuteQuack으로 알고리즘군을 정의하고 있음
  • 각 행동을 QuackBehavior로 캡슐화 했음
  • Client는 QuackBehavior만을 바라보고 있음(참조변수가 QuackBehavior임)
  • 사용하고 싶은 소리 행동(전략)을 마음껏 수정할 수 있음
  • 소리가 나는 행동을 Client로 부터 분리하여 독립적으로 쓸 수 있음

💡 Client가 외부로부터 QuackBehavior을 주입 받으면, 완전히 독립적이게 됨