핵심 인사이트 (3줄 요약)

  1. 본질: 상태 패턴(State)과 전략 패턴(Strategy)은 GoF 행위 패턴으로, 구조가 동일(Context + 인터페이스 + 구체 구현 클래스)하지만 해결하는 문제와 교체 주체가 다르다. 상태 패턴은 '상태에 따른 동작 + 상태 전이'를, 전략 패턴은 '교체 가능한 알고리즘'을 목적으로 한다.
  2. 가치: 두 패턴의 차이를 명확히 이해하면 설계 상황에 맞는 패턴을 선택할 수 있다. 상태 패턴은 상태 전이 로직이 복잡한 FSM(유한 상태 기계) 구현에, 전략 패턴은 동일한 인터페이스의 알고리즘을 런타임에 교체해야 할 때 적합하다.
  3. 판단 포인트: 핵심 판단 기준은 '교체 주체'다. 외부(클라이언트)가 교체 → 전략 패턴, 내부(State 객체)가 스스로 전이 → 상태 패턴. 상태 전이 여부가 없으면 전략 패턴이 더 적합하다.

Ⅰ. 개요 및 필요성

GoF 패턴 학습에서 가장 많이 혼동되는 두 패턴이다. UML 클래스 다이어그램이 거의 동일하여 코드만 봐서는 구분이 어렵다. 의도(Intent)를 보고 구분해야 한다.

전략 패턴의 의도: "알고리즘군을 정의하고, 각각을 캡슐화하여 교환 가능하게 만든다. 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다."

상태 패턴의 의도: "객체의 내부 상태가 변할 때 객체의 행위를 변경한다. 객체는 클래스를 바꾸는 것처럼 보인다."

┌─────────────────────────────────────────────────────────────┐
│          구조 비교 (UML 거의 동일)                           │
├─────────────────────────────────────────────────────────────┤
│  전략 패턴                  상태 패턴                        │
│  Context                    Context                         │
│  - strategy: Strategy       - state: State                  │
│  + setStrategy(s)           + setState(s)  ← State 내부 호출│
│  + execute()                + request()                     │
│        │ (위임)                   │ (위임)                  │
│   Strategy (인터페이스)      State (인터페이스)              │
│  + algorithm()              + handle(ctx)                   │
│        ▲                          ▲                         │
│  StrategyA  StrategyB       StateA  StateB                  │
│                             (StateA.handle에서 ctx.setState  │
│                              (new StateB()) 호출)            │
└─────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 같은 '교체 메커니즘'을 사용하지만, 전략은 요리사가 레시피를 선택(외부 교체), 상태는 신호등이 스스로 다음 상태로 전환(내부 전이)하는 것이다.

Ⅱ. 아키텍처 및 핵심 원리

결정적 차이점 정리:

항목설명포인트
교체 주체클라이언트 (외부)State 객체 자신 (내부)
인터페이스 상호 인식전략이 서로를 모름상태가 다른 상태를 알 수 있음
상태 전이XO (핵심 기능)
Context의 역할전략 보유·실행상태 보유·위임
주 관심사알고리즘 교체상태에 따른 행동 변경
클라이언트 인식전략 종류 알아야 함상태 전이를 알 필요 없음
┌─────────────────────────────────────────────────────────────┐
│       코드 수준 차이                                         │
├─────────────────────────────────────────────────────────────┤
│  // 전략 패턴: 외부에서 교체                                │
│  context.setStrategy(new FastSortStrategy());               │
│  context.executeStrategy(data);                             │
│                                                             │
│  // 상태 패턴: 내부 전이                                    │
│  // 클라이언트는 상태 전이를 모름                           │
│  order.process(); // 내부에서 상태 전이 발생                │
│  // ReceivedState.process(ctx) {                            │
│  //   ctx.setState(new ProcessingState()); // 내부 전이     │
│  // }                                                       │
└─────────────────────────────────────────────────────────────┘
  • 📢 섹션 요약 비유: 전략 패턴은 리모컨(클라이언트)이 채널(전략)을 선택하는 것이고, 상태 패턴은 자판기가 내부 상태에 따라 자동으로 모드를 전환하는 것이다.

Ⅲ. 비교 및 연결

두 패턴이 함께 사용되는 경우: 상태 패턴의 각 상태가 내부적으로 전략 패턴을 사용하여 알고리즘을 교체할 수 있다. 예: 주문 상태(상태 패턴)에 따라 적용되는 할인 계산 알고리즘(전략 패턴)이 다를 수 있다.

비교 축AB
상태 + 전략각 상태가 다른 전략 사용주문 상태별 할인 전략
전략만단순 알고리즘 교체정렬 알고리즘 선택
상태만복잡한 상태 전이주문 처리 워크플로우
  • 📢 섹션 요약 비유: 게임 캐릭터(상태 패턴: 일반·전투·회복 상태)가 각 상태에서 공격 방식(전략 패턴: 원거리·근접·마법)을 바꾸는 것처럼 두 패턴을 조합할 수 있다.

Ⅳ. 실무 적용 및 기술사 판단

기술사 시험에서 두 패턴 비교 문제 풀이 전략: 핵심 키워드 ① "상태 전이"가 있으면 → 상태 패턴, ② "알고리즘 교체"가 있으면 → 전략 패턴, ③ "외부 설정"이면 → 전략 패턴, ④ "자동 전환"이면 → 상태 패턴.

판단 체크리스트

  1. 요구사항에 '상태 전이'(A 상태에서 B 상태로 자동 변환)가 있는가? → 상태 패턴
  2. 요구사항에 '알고리즘 교체'(클라이언트가 선택)가 있는가? → 전략 패턴
  3. 두 패턴을 혼동할 때 '교체 주체'(내부 vs 외부)로 구분하고 있는가?
  4. 두 패턴이 함께 사용될 수 있는 경우를 인식하는가?
  5. 구조 다이어그램이 아닌 '의도(Intent)'로 패턴을 구분하고 있는가?
  • 📢 섹션 요약 비유: 면접관이 "전략과 상태 패턴의 차이?"를 물으면, '교체 주체'(외부 vs 내부)와 '상태 전이 유무'로 명확히 구분하라.

Ⅴ. 기대효과 및 결론

상태 패턴과 전략 패턴의 차이를 명확히 이해하면 복잡한 상태 기반 시스템과 알고리즘 교체 시스템을 올바르게 설계할 수 있다. 두 패턴을 혼동하면 의도에 맞지 않는 설계가 되어 유지보수가 어려워진다.

결론: 구조가 같더라도 의도(Intent)로 패턴을 구분하라. 상태 전이가 필요하면 상태 패턴, 알고리즘 교체가 필요하면 전략 패턴, 상태+알고리즘 모두 필요하면 두 패턴을 조합하라.

  • 📢 섹션 요약 비유: 같은 '채널 변경' 메커니즘이라도, 사용자가 직접 변경(전략)하는 것과 프로그램이 자동으로 변경(상태)하는 것은 다른 설계 의도를 가진다.

📌 관련 개념 맵

[GoF 패턴 비교] → [전략 패턴(외부 교체)] vs [상태 패턴(내부 전이)] → [두 패턴 조합] → [FSM 프레임워크]

개념연결 포인트
GoF 의도(Intent)구조가 같아도 의도로 패턴 구분
유한 상태 기계(FSM)상태 패턴의 이론적 기반
함수형 패턴람다·고차 함수로 두 패턴 간결화
스프링 State Machine상태 패턴의 프레임워크 구현

📈 관련 키워드 및 발전 흐름도

[GoF 두 패턴 비교] → [의도 기반 구분 기준] → [두 패턴 조합 설계] → [FSM 프레임워크 적용]

👶 어린이를 위한 3줄 비유 설명

  1. 전략 패턴은 리모컨처럼 내가 직접 채널(알고리즘)을 바꾸는 것이에요.
  2. 상태 패턴은 신호등처럼 현재 상태에 따라 자동으로 다음 상태로 바뀌는 것이에요.
  3. 구조는 같지만 '누가 바꾸는지'(외부 vs 내부)가 핵심 차이예요!