Programming
전략 패턴(Strategy Pattern)에 대해서 설명해주세요
if-else 지옥을 탈출하는 가장 실용적인 디자인 패턴 — 전략 패턴의 구조, OCP 원칙, Spring DI 활용까지 인터랙티브 시각화로 완전 정복합니다.
2026년 3월 19일 · 약 11분 읽기
Q. "전략 패턴이 무엇인지 설명하고, 실무에서 어떻게 활용하는지 말씀해주세요."
예상 꼬리질문
답변 가이드
"전략 패턴은 알고리즘 군(family)을 인터페이스로 정의하고, 각각을 별도 클래스로 캡슐화하여 런타임에 교체 가능하게 만드는 행위 패턴입니다. 결제 수단, 할인 정책, 정렬 알고리즘처럼 같은 목적의 서로 다른 구현이 필요할 때 사용합니다."
"핵심은 조건문(if-else/switch) 분기를 객체 다형성으로 대체하는 것입니다. 새 알고리즘을 추가할 때 기존 코드를 수정하지 않고 새 클래스만 추가하면 되므로 OCP(개방-폐쇄 원칙)를 자연스럽게 준수합니다."
"Spring에서는 DI(의존성 주입)과 결합하여 Map<String, Strategy> 형태로 모든 구현체를 자동 주입받고, 키 기반으로 전략을 선택합니다. Spring 내부에서도 HandlerMapping, ViewResolver, TransactionManager 등 전략 패턴을 광범위하게 사용합니다."
면접에서 "디자인 패턴 아는 거 하나 설명해주세요"라고 하면, 가장 실용적이면서 코드로 바로 보여줄 수 있는 패턴이 전략 패턴입니다.
if-else 지옥에서 탈출하는 과정을 인터랙티브 시각화로 직접 체험하며 준비해 보겠습니다.
1. if-else 지옥 vs 전략 패턴
꼬리질문: "if-else 분기와 전략 패턴의 차이를 설명해주세요"
실무에서 가장 흔하게 마주치는 코드 악취(Code Smell)는 조건문 분기의 비대화입니다. 결제 수단이 3개일 때는 if-else로 충분하지만, 10개가 되면 메서드가 수백 줄로 불어납니다.
결제 수단을 추가하며 두 접근법의 차이를 직접 확인하세요.
if-else 지옥 vs 전략 패턴
결제 수단을 추가하며 두 접근법의 차이를 확인하세요.
void pay(String type, int amt) {
if (type.equals("CARD")) {
// 신용카드 로직 50줄...
} else if (type.equals("KAKAO")) {
// 카카오페이 로직 50줄...
} else if (type.equals("NAVER")) {
// 네이버페이 로직 50줄...
}
}
새 결제 수단 추가 시 이 메서드를 수정해야 함 (OCP 위반)
interface PaymentStrategy {
void pay(int amount);
}
새 결제 수단 = 새 클래스만 추가 (기존 코드 수정 없음)
2. 전략 패턴의 3가지 구성 요소
꼬리질문: "전략 패턴의 3가지 구성 요소는 무엇인가요?"
전략 패턴은 Strategy(인터페이스), ConcreteStrategy(구현 클래스), Context(사용자)라는 3가지 역할로 구성됩니다.
각 구성 요소를 클릭하여 역할과 코드를 확인하세요.
전략 패턴의 3가지 구성 요소
각 요소를 클릭하여 역할과 코드를 확인하세요.
Strategy 객체를 보유하고 실행을 위임하는 클래스. 어떤 ConcreteStrategy가 주입되든 동일하게 동작합니다.
class ShoppingCart {
private PaymentStrategy strategy;
void setStrategy(PaymentStrategy s) {
this.strategy = s;
}
void checkout(int amount) {
strategy.pay(amount); // 위임
}
}3. Spring DI와 전략 패턴
꼬리질문: "Spring에서 전략 패턴을 어떻게 활용하나요?"
Spring에서는 DI(의존성 주입)를 활용하여 전략 패턴을 더 우아하게 구현합니다. Map<String, PaymentStrategy>로 모든 구현체를 자동 주입받고, Bean 이름을 키로 전략을 선택합니다.
Spring IoC 컨테이너의 전략 패턴 자동화를 시뮬레이션하세요.
Spring DI와 전략 패턴
Spring IoC 컨테이너가 전략 패턴을 어떻게 자동화하는지 확인하세요.
Spring IoC Container — Map<String, PaymentStrategy>
// PaymentService.java
Map<String, PaymentStrategy> strategies;
strategies.get("...").pay(50000);
4. 전략 vs 템플릿 메서드 vs 상태 패턴
꼬리질문: "전략 패턴과 다른 행위 패턴의 차이는 무엇인가요?"
세 패턴 모두 행위를 분리한다는 점에서 비슷하지만, 전략은 위임(Delegation), 템플릿 메서드는 상속(Inheritance), 상태는 상태 전이(State Transition)가 핵심입니다.
세 패턴을 비교하며 차이를 확인하세요.
전략 vs 템플릿 메서드 vs 상태 패턴
세 행위 패턴의 차이를 비교하세요.
전략 패턴 상세
클라이언트가 외부에서 전략을 선택하여 Context에 주입합니다. Context는 인터페이스에만 의존하므로 어떤 전략이든 동일하게 사용합니다.
Context → <<interface>> Strategy ← ConcreteStrategyA, B, C
자주 발생하는 문제
퀴즈로 확인하기
개념을 제대로 이해했는지 확인해 보세요.
결제 시스템에 "토스페이" 결제 수단을 추가해야 한다. 전략 패턴이 적용된 경우, 어떤 작업이 필요한가?
면접 체크리스트
이 항목들을 자신 있게 설명할 수 있다면 전략 패턴 질문은 준비 완료입니다.
- - 정의: 알고리즘 군을 캡슐화하여 런타임에 교체 가능하게 하는 행위 패턴
- - OCP: 새 전략 추가 시 기존 코드 수정 불필요, 새 클래스만 추가
- - 3요소: Strategy(인터페이스) + ConcreteStrategy(구현) + Context(사용)
- - Spring DI: Map<String, Strategy> 주입으로 팩토리 자동화
- - vs 템플릿 메서드: 위임 vs 상속, 전략은 인터페이스, 템플릿은 추상 클래스
- - vs 상태 패턴: 외부 선택 vs 내부 상태 전이
참고 자료
- Refactoring Guru — Strategy Pattern — 전략 패턴을 한국어 다이어그램과 함께 쉽게 설명
- 인프런 — 디자인 패턴 with Java — 한국어 디자인 패턴 강의, 전략 패턴 포함
의견을 들려주세요
서비스 개선에 큰 도움이 됩니다. 익명으로 자유롭게 남겨주세요.