[디자인패턴] Strategy pattern(스트래티지 / 전략 패턴)
2016. 11. 8. 17:23ㆍ프로그래밍/디자인패턴
- 목차
Strategy pattern(스트래티지 / 전략 패턴)
정의
알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용 할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 즉, 하나의 결과를 만드는 목적은 동일하나 그 목적을 달성할 수 있는 방법이 여러가지가 존재할 경우 기본이 되는 템플릿 메서드패턴(Templat Method pattern)과 함께 가장 많이 사용되는 패턴. |
내용
일반적으로는 객체의 메서드에 대한 알고리즘이 미리 정해져있고, 정해진 알고리즘에 따라 어플리케이션 수행중에 그 메서드가 불리면 정해진 알고리즘이 불리게 된다.
전략패턴 에서는 이 알고리즘이 여러개가 설정되어있고, 수행중에 이 알고리즘 중에 하나가 선택되어 가변 적으로 수행하는 방식이다.
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
- 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
- 알고리즘 인터페이스를 정의하고 각 알고리즘을 클래스별로 캡슐화 하여 교체 가능하게 함
- 변경이 필요한 알고리즘을 인터페이스를 통해 외부로 분리, 구체적 알고리즘 클래스를 필요에 따라 바꿔 사용할 수 있게 함
- 개방폐쇄 원칙 실현에 가장 잘 맞는 패턴
자바의 전략 패턴은 함수 객체를 사용해야 가능하다.
Comparator 는 전략 패턴의 모범생 같은 구현이라고 볼 수 있겠다.
Comparator 는 전략 패턴의 모범생 같은 구현이라고 볼 수 있겠다.
위에 익명클래스를 만드는 부분처럼 전략에 부합하는 클래스를 정의하여 매개 변수로 넘겨
숫자를 내림차순으로 정렬 되도록 알고리즘을 교체할 수 있다.
이 처럼 동일한 명령에 다른 알고리즘을 적용 가능하게 하는 패턴이 전략패턴 이라 볼 수 있다.
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
[디자인패턴] 원형(프로토타입) 패턴(prototype pattern) (0) | 2016.11.15 |
---|---|
[디자인패턴] 싱글톤패턴(Singleton pattern) (0) | 2016.11.15 |
[디자인패턴] 팩토리 메서드 패턴(Factory method pattern) (0) | 2016.11.10 |
[디자인패턴] 템플릿 메서드 패턴(Template Method Pattern) (0) | 2016.11.10 |
[디자인패턴] 어댑터 패턴(Adater patterns) (0) | 2016.11.09 |