피드로 돌아가기
状态模式深度指南:构建可动态切换行为的艺术
Dev.toDev.to
Backend

状态模式深度指南:构建可动态切换行为的艺术

Polymorphism 기반 State Pattern 도입을 통한 조건부 분기 로직의 구조적 제거

架构师小白2026년 6월 26일5intermediate

Context

주문 시스템 등 상태 전이에 따른 행위 변화가 빈번한 도메인에서 발생하는 다수의 if-else 조건문 기반 설계 구조. 상태 추가 시 기존 코드를 수정해야 하는 Open-Closed Principle 위반 및 상태 전이 로직의 파편화로 인한 유지보수 복잡도 증가가 한계점으로 분석됨.

Technical Solution

  • 상태별 행위를 독립적인 클래스로 캡슐화하여 ConcreteState로 정의하는 구조적 분리
  • Context 클래스 내에 현재 상태 인스턴스를 유지하며 요청을 해당 상태 객체로 위임하는 Delegation 패턴 적용
  • 각 State 클래스 내부에서 다음 상태로의 전이 로직을 직접 관리하여 상태 전이의 원자성 확보
  • 공통 인터페이스(OrderState) 정의를 통한 런타임 시의 다형성 활용 및 분기문 제거
  • 복잡한 전이 시나리오 대응을 위해 Spring Statemachine과 같은 프레임워크 수준의 State Machine 도입 검토
  • State Pattern과 Strategy Pattern의 구분: 상태 전이가 내부적으로 자동 발생하느냐, 클라이언트가 전략을 선택하느냐에 따른 설계 의도 차별화

- 상태 전이 로직이 3개 이상의 조건분기를 포함하는지 확인 - 새로운 상태 추가 시 기존 비즈니스 로직 수정이 필요한지 검토 - 상태별로 허용되지 않는 동작에 대해 IllegalStateException 처리가 구현되었는지 확인 - 상태 전이 규칙이 복잡해질 경우 하드코딩된 전이 대신 State Machine 프레임워크 도입 고려

원문 읽기