Strategy 패턴은 해당 이름 뜻에서도 알 수 있듯이 전략
과 관련된 패턴입니다.
즉, 전략(알고리즘)을 바꿔서, 같은 문제를 다른 방법으로 해결하기 쉽게 만들어주는 패턴입니다.
여기에서 살펴보아야 할 것은 Context
클래스입니다.
Context 클래스가 전략(알고리즘)을 선택적으로 교체할 수 있도록 합니다.
전략(알고리즘)을 선택적으로 교체해야 하는 상황을 살펴보겠습니다.
알고리즘을 개량해서 더 빠르게 만들고 싶은 경우
원래 알고리즘과 개량한 알고리즘의 속도를 비교하고 싶은 경우
알고리즘의 동작이 런타임에 실시간으로 교체 되어야 하는 경우
여기에서 가장 중요하게 Strategy 패턴를 사용해야 하는 경우는 3번과 같이 알고리즘의 동작이 런타임에 실시간으로 교체되어야 하는 경우라고 할 수 있습니다.
즉, 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다.
(출처 : https://victorydntmd.tistory.com/292)
이전 글에서 Builder 패턴에 대해서 다루어보았습니다.
만약에 Builder 패턴에서 Client가 없다면, Strategy 패턴 다이어그램과 Builder 패턴 다이어그램은 굉장히 유사한 구조라고 할 수 있습니다.
따라서, 해당 패턴을 비교하기 위해서는 Context와 Director의 역할을 잘 생각하면 됩니다.
Collections의 sort() 메서드에 의해 구현되는 compare() 메서드
에서 사용됩니다.비교하려는 전략 알고리즘을 변경하여, 원하는 전략으로 선택적인 교체가 가능합니다.
class StrategyInJava {
public static void main(String[] args){
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
Collections.sort(numbers, new Comparator<Integer>()){
@Override //비교하는 전략 알고리즘을 지정하여, 전략 객체 할당
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
}
}
}
출처 1 : https://inpa.tistory.com/entry/GOF-💠-전략Strategy-패턴-제대로-배워보자#comparator