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