본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

전략 패턴(Strategy Pattern)은 같은 일을 하는 여러 알고리즘을 각각 별도 객체로 캡슐화해 서로 바꿔 쓸 수 있게 하고, 그 알고리즘을 쓰는 쪽(Context)은 공통 인터페이스만 알게 하는 GoF 행위 패턴이다. 정책(Policy) 패턴이라고도 한다.

GoF 는 의도를 "알고리즘군을 정의하고 각각을 캡슐화해 교환 가능하게 만든다. 전략을 쓰면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 바꿀 수 있다"로 적는다.[1] 조건문으로 알고리즘을 고르는 대신 알고리즘 객체를 주입하므로, 새 알고리즘을 더해도 Context 코드를 고치지 않는다.

역할 설명
Strategy 알고리즘의 공통 인터페이스
ConcreteStrategy 실제 알고리즘 구현
Context Strategy 참조를 가지고 일을 맡긴다. 실행 중에 전략을 바꿀 수 있다
  • 정렬 기준 - Java 의 Comparator 는 두 객체의 순서를 정하는 비교 함수를 객체로 넘기는 인터페이스이다. Collections.sort 같은 정렬 메서드는 어떤 Comparator 를 받느냐에 따라 정렬 기준이 바뀐다.[2]
  • 결제 방식(카드·계좌이체·간편결제), 할인 정책, 압축 방식 선택
  • MVC 의 컨트롤러 - 고전적 MVC 에서 컨트롤러는 하나 이상의 뷰에 대한 전략이다. 뷰는 화면 표시만 맡고, 사용자 입력이 애플리케이션에서 무슨 뜻인지는 컨트롤러에 맡긴다. 컨트롤러를 바꾸면 같은 뷰가 다르게 반응한다.[3]
  • 장점 - 조건문이 줄고, 알고리즘을 따로 시험하고 재사용할 수 있다. 새 전략 추가가 쉽다(개방-폐쇄 원칙).
  • 단점 - 클라이언트가 전략들의 차이를 알고 골라야 한다. 전략 객체 수가 늘어난다.

비슷한 패턴과 구별하기

편집 원본 편집
패턴 무엇을 바꾸는가 바꾸는 주체
전략 알고리즘(어떻게 할지) 클라이언트가 전략 객체를 골라 넣는다
상태(State) 객체 상태에 따른 행동 객체가 상태 전이에 따라 스스로 바꾼다
템플릿 메소드 알고리즘의 일부 단계 상속한 하위 클래스가 단계를 재정의한다

전략은 위임(구성)으로 알고리즘 전체를 갈아 끼우고, 템플릿 메소드는 상속으로 골격 안의 일부만 바꾼다.

  1. ↑ 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).
  2. ↑ 「Interface Comparator<T>」, Java SE 8 API, Oracle, https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html, 확인일: 2026-11-04.
  3. ↑ 「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.