본문 바로가기
지식/디자인패턴

Head First Design Patterns : State Pattern

by CodeRain 2024. 3. 13.

State Pattern

  • 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음
  • 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있음.

 

구조

  • Context
    • ConcreteState 중 하나에 대한 참조를 저장 하고 상태별 작업을 위임.
    • State 인터페이스를 통해 커뮤니케이션
    • 새로운 상태 객체를 전달 하기 위해 setter 노출
  • State
    • 상태별 메서드 선언.
    • 모든 상태에 적합해야함. 일부 상태에서 절대 호출 되지 않는 쓸모없는 메서드가 있는 것을 방지.
  • ConcreteState
    • State의 메서드 구현
    • 유사코드 반복 방지를 위해 중간 추상 클래스를 제공 할 수 있음.
    • Context 개체를 가지고 있어 Context의 상태 전환(setter이용) 하거나 필요한 정보를 가져올 수 있음.

 

장점

  • 특정상태들과 관련된 코드를 별로의 클래스 들로 구성 하기 때문에 단일 책임의 원칙 준수
  • 기존 상태 클래스들 또는 Context를 변경하지 않고 새로운 상태를 도입할 수 있기 때문에 개방/폐쇄 원칙 준수

 

단점

  • 상태가 적을 경우나 머신이 거의 변경되지 않을 때 상태 패턴을 적용하는 것은 과도
  • 관리해야할 클래스가 늘어 날 수 있음.

 

  • javax.faces.lifecycle.LifeCycle#execute() (Faces­Servlet에 의해 제어됨: 행동은 JSF 생명주기의 현재 단계​(상태)​에 의존함)

 

참조