[디자인패턴] Strategy pattern(스트래티지 / 전략 패턴)

2016. 11. 8. 17:23프로그래밍/디자인패턴

    목차

Strategy pattern(스트래티지 / 전략 패턴)


정의

알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용 할 수 있도록 만든다.

스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.


즉, 하나의 결과를 만드는 목적은 동일하나 그 목적을 달성할 수 있는

방법이 여러가지가 존재할 경우 기본이 되는 템플릿 메서드패턴(Templat Method pattern)과 함께 가장 많이 사용되는 패턴.



내용

일반적으로는 객체의 메서드에 대한 알고리즘이 미리 정해져있고, 정해진 알고리즘에 따라 어플리케이션 수행중에 그 메서드가 불리면 정해진 알고리즘이 불리게 된다. 


전략패턴 에서는 이 알고리즘이 여러개가 설정되어있고, 수행중에 이 알고리즘 중에 하나가 선택되어 가변 적으로 수행하는 방식이다. 


  • 알고리즘을 교체할 수 있는 구조
  • 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
  • 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
  • 알고리즘 인터페이스를 정의하고 각 알고리즘을 클래스별로 캡슐화 하여 교체 가능하게 함
  • 변경이 필요한 알고리즘을 인터페이스를 통해 외부로 분리, 구체적 알고리즘 클래스를 필요에 따라 바꿔 사용할 수 있게 함
  • 개방폐쇄 원칙 실현에 가장 잘 맞는 패턴

자바의 전략 패턴은 함수 객체를 사용해야 가능하다.
Comparator 는 전략 패턴의 모범생 같은 구현이라고 볼 수 있겠다.


위에 익명클래스를 만드는 부분처럼 전략에 부합하는 클래스를 정의하여 매개 변수로 넘겨 
숫자를 내림차순으로 정렬 되도록 알고리즘을 교체할 수 있다.

이 처럼 동일한 명령에 다른 알고리즘을 적용 가능하게 하는 패턴이 전략패턴 이라 볼 수 있다.