상태 패턴
객체의 내부 상태에 따라 행위가 달라질 때, 상태를 객체로 분리하여 조건문 없이 동작을 변경하는 패턴
상태를 캡슐화한 다음 현재 상태를 나타태는 객체에게 행동을 위임하여 내부 상태가 바뀔 때 행동이 달라지게 됨
상태는 동일한 인터페이스를 구현하지만, 상태별로 메서드의 동작 방식이 다르게 정의됨
상태 전이 규칙은 상태 객체 내부에 캡슐화되어 있고, 필요 시 상태 객체가 스스로 다른 상태로 전환함
이를 통해 조건문(
if / switch)을 제거하고, 상태 추가나 변경 시 기존 코드에 미치는 영향을 최소화하여 코드의 복잡성을 낮추고 유연성과 확장성을 높힘
전략 패턴과 비슷하지만 용도가 다름
상태 패턴: "지금 무엇인지"를 변경 (내부 상태 변경에 따라 스스로 행동이 변경됨)
전략 패턴: "어떻게 할지를" 변경 (사용할 알고리즘을 외부에서 변경)
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