전략 패턴
IT위키
더 많은 작업
- 상위 문서: 소프트웨어 디자인 패턴
전략 패턴(Strategy Pattern)은 같은 일을 하는 여러 알고리즘을 각각 별도 객체로 캡슐화해 서로 바꿔 쓸 수 있게 하고, 그 알고리즘을 쓰는 쪽(Context)은 공통 인터페이스만 알게 하는 GoF 행위 패턴이다. 정책(Policy) 패턴이라고도 한다.
GoF 는 의도를 "알고리즘군을 정의하고 각각을 캡슐화해 교환 가능하게 만든다. 전략을 쓰면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 바꿀 수 있다"로 적는다.[1] 조건문으로 알고리즘을 고르는 대신 알고리즘 객체를 주입하므로, 새 알고리즘을 더해도 Context 코드를 고치지 않는다.
| 역할 | 설명 |
|---|---|
| Strategy | 알고리즘의 공통 인터페이스 |
| ConcreteStrategy | 실제 알고리즘 구현 |
| Context | Strategy 참조를 가지고 일을 맡긴다. 실행 중에 전략을 바꿀 수 있다 |
- 장점 - 조건문이 줄고, 알고리즘을 따로 시험하고 재사용할 수 있다. 새 전략 추가가 쉽다(개방-폐쇄 원칙).
- 단점 - 클라이언트가 전략들의 차이를 알고 골라야 한다. 전략 객체 수가 늘어난다.
| 패턴 | 무엇을 바꾸는가 | 바꾸는 주체 |
|---|---|---|
| 전략 | 알고리즘(어떻게 할지) | 클라이언트가 전략 객체를 골라 넣는다 |
| 상태(State) | 객체 상태에 따른 행동 | 객체가 상태 전이에 따라 스스로 바꾼다 |
| 템플릿 메소드 | 알고리즘의 일부 단계 | 상속한 하위 클래스가 단계를 재정의한다 |
전략은 위임(구성)으로 알고리즘 전체를 갈아 끼우고, 템플릿 메소드는 상속으로 골격 안의 일부만 바꾼다.
- ↑ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 『Design Patterns: Elements of Reusable Object-Oriented Software』, Addison-Wesley, 1994, ISBN 0-201-63361-2, pp. 315-323(Strategy).
- ↑ 「Interface Comparator<T>」, Java SE 8 API, Oracle, https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html, 확인일: 2026-11-04.
- ↑ 「Model-View-Controller」, Cocoa Core Competencies / Concepts in Objective-C Programming, Apple Developer Documentation Archive, https://developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html, 확인일: 2026-11-04.