You will be fine

<디자인패턴입문> 7. Strategy 패턴

by BFine
반응형

 

www.yes24.com/Product/Goods/2918928

 

Java 언어로 배우는 디자인 패턴 입문

이 책은 디자인 패턴의 입문서입니다. GoF가 정리한 23개의 디자인 패턴을 하나씩 다루면서 객체 지향을 잘 모르는 초보자도 이해하기 쉽도록 정리하고 있습니다. 단순한 이론이나 논리을 제시하

www.yes24.com

 

가. 무엇인가

 a. 전략을 유동적으로!

  -  전략패턴의 전략은 방책, 문제를 해결해 갈때의 방법등을 의미한다.

       => 프로그래밍의 경우에는 알고리즘으로 생각해도 좋다.

  -  알고리즘(전략)을 빈틈없이 교체해서 같은 문제를 다른방법으로도 해결할수 있도록 도와주는 패턴

 

나. 만들어본 예제

 a. Strategy(전략)의 역할

  -  전략을 이용하기 위한 인터페이스 결정

public interface Strategy {
    int calculate(int number1,int number2);
}

 

 b. ConcreteStrategy(구체적인 전략)의 역할

  -  구체적인 전략(구현체)의 역할이며 인터페이스를  implements해서 로직을 구성한다.

public class AddtionStrategy implements Strategy{
    @Override
    public int calculate(int number1, int number2) {
        return number1 + number2;
    }
}

public class SubtractionStrategy implements Strategy{
    @Override
    public int calculate(int number1, int number2) {
        return number1-number2;
    }
}

 

 c. Context(문맥)

  -  Strategy를 이용하는 역할

  -  concreteStrategy의 인스턴스를 가지고 있고 필요에 따라 그것을 이용한다.

public class Calculater {
    private Strategy stragey;

    public Calculater(Strategy stragey) {
        this.stragey = stragey;
    }

    public int calculate(int number1,int number2){
        return stragey.calculate(number1,number2);
    }
}

 

 d. Main

 public static void main(String[] args) {
        int number1 = 10;
        int number2 = 5;
        Calculater add = new Calculater(new AddtionStrategy());
        Calculater sub = new Calculater(new SubtractionStrategy());

        System.out.println(add.calculate(number1,number2));
        System.out.println(sub.calculate(number1,number2));

    }
}

  

다. 정리

 a. 일부러 Strategy 역할을 만들필요가 있나?

  -  전략 패턴에서는 알고리즘 부분을 다른 부분과 의식적으로 분리해서 로직의 인터페이스 부분만 규정하고있다.

  -  위임이라는 느슨한 연결을 사용하고 있어서 알고리즘을 용이하게 교환할 수 있다.

  -  예로 어떤 게임의 난이도 조절을 간단하게 교체할 수 있다.

 

Strategy 패턴은 알고리즘 변경을 느슨하게 하는 패턴이다.
반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기