정의
- 어떤 동작을 하는 알고리즘을 정의하고 각각을 Encapsulation하고 Delegate를 통해서 어떤 행동을 할지 결정하는 패턴이다.
- Strategy pattern을 이용하면 알고리즘을 사용하는 client는 독립적으로 알고리즘을 변경할 수 있다.
- 상속보다는 구성을 이용한다. 즉 ‘A는 B다’ 보다는 ‘A에 B가 있다’라는 패턴이다.
- 정리하자면, 하나의 결과를 만드는 목적은 동일하나, 그 목적을 달성할 수 있는 방법이 여러가지 존재할 경우 기본이 되는 template method와 함께 많이 사용되는 패턴이다.
사용하기 좋은 경우
- 행동만 조금씩 다를 뿐 관련된 class가 많을 때
- 알고리즘의 변형이 필요할 때
- User가 몰라야 하는 data를 사용하는 알고리즘이 있을 때
- 하나의 class가 많은 행동을 정의하고, 이런 행동들이 그 class의 연산 안에서 복잡한 조건문의 형태일 때
구성
- 여러 개의 sort algorithm을 정의하고 필요에 따라 선택적으로 적용한다.
- App에서 달라지는 부분을 찾아내어, 그렇지 않은 부분으로부터 분리한다.
- 구현이 아닌 interface에 맞춘다.
- inheritance보단 composition을 활용한다.
장점
- 알고리즘을 Encapsulation 시켰기 때문에 확장성이 좋다.
- 프로그램이 실행 중에 알고리즘을 setting할 수 있다.
- 로직을 독립적으로 관리하기 쉽다는 장점이 있다.
- 코드의 중복을 줄일 수 있다.
단점
- Strategy Object와 Context Object 사이 의사소통에 overhead가 있다.
UML