피드로 돌아가기
LLD:12-Vending Machine System
Dev.toDev.to
Backend

State Pattern 적용을 통한 조건부 분기 제거 및 상태 전이 구조 설계

LLD:12-Vending Machine System

NOOB2026년 6월 26일7intermediate

Context

자판기 시스템 내 Idle, Has Money, Dispensing, Out of Stock 등 다중 상태에 따른 동작 제어 필요성 대두. 기존 방식의 대규모 if/else 조건문 사용으로 인한 코드 복잡도 증가와 유지보수 효율성 저하 문제를 해결하고자 함.

Technical Solution

  • State Interface 정의를 통한 insertMoney, selectItem, dispenseItem 메서드의 다형성 확보
  • VendingMachine Context 클래스에서 currentState 참조를 유지하여 런타임 시 동작을 동적으로 변경하는 구조 설계
  • 각 상태별 전용 Concrete Class 구현을 통한 상태별 비즈니스 로직 및 유효성 검증 로직의 격리
  • machine.setState() 호출을 통한 상태 객체 교체 방식으로 하드코딩된 조건문 없이 상태 전이 구현
  • 새로운 상태(예: MaintenanceState) 추가 시 기존 코드 수정 없이 확장 가능한 Open/Closed Principle 적용
  • 상태 전이 로직을 개별 상태 클래스로 분산시켜 단일 책임 원칙(Single Responsibility) 준수

- 복잡한 조건문이 반복되는 상태 제어 로직 발견 시 State Pattern 검토 - 상태 전이 규칙이 빈번하게 변경되는 시스템의 경우 전이 로직을 Context가 아닌 State 클래스 내부로 캡슐화 - 상태 객체의 잦은 생성을 방지하기 위해 Context 내에서 상태 인스턴스를 미리 생성하여 재사용하는 전략 고려

원문 읽기