상태 패턴

객체의 내부 상태에 따라 행위가 달라질 때, 상태를 객체로 분리하여 조건문 없이 동작을 변경하는 패턴

  • 상태를 캡슐화한 다음 현재 상태를 나타태는 객체에게 행동을 위임하여 내부 상태가 바뀔 때 행동이 달라지게 됨

  • 상태는 동일한 인터페이스를 구현하지만, 상태별로 메서드의 동작 방식이 다르게 정의됨

  • 상태 전이 규칙은 상태 객체 내부에 캡슐화되어 있고, 필요 시 상태 객체가 스스로 다른 상태로 전환함

  • 이를 통해 조건문(if / switch)을 제거하고, 상태 추가나 변경 시 기존 코드에 미치는 영향을 최소화하여 코드의 복잡성을 낮추고 유연성과 확장성을 높힘

circle-exclamation

1. Context 객체

상태를 소유하여 '현재 상태'만 알고, 행위는 상태 객체에 위임

class VideoPlayer {
  constructor(private state: VideoPlayerState)
  
  setState(state: VideoPlayerState) {
    this.state = state
  }
  
  play() {
    this.state.play()
  }
  
  stop() {
    this.state.stop()
  }
}

2. State 인터페이스

상태별 공통 인터페이스 정의

3. State 객체

Last updated