State Pattern
- 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있음
- 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있음.
구조
- Context
- ConcreteState 중 하나에 대한 참조를 저장 하고 상태별 작업을 위임.
- State 인터페이스를 통해 커뮤니케이션
- 새로운 상태 객체를 전달 하기 위해 setter 노출
- State
- 상태별 메서드 선언.
- 모든 상태에 적합해야함. 일부 상태에서 절대 호출 되지 않는 쓸모없는 메서드가 있는 것을 방지.
- ConcreteState
- State의 메서드 구현
- 유사코드 반복 방지를 위해 중간 추상 클래스를 제공 할 수 있음.
- Context 개체를 가지고 있어 Context의 상태 전환(setter이용) 하거나 필요한 정보를 가져올 수 있음.
장점
- 특정상태들과 관련된 코드를 별로의 클래스 들로 구성 하기 때문에 단일 책임의 원칙 준수
- 기존 상태 클래스들 또는 Context를 변경하지 않고 새로운 상태를 도입할 수 있기 때문에 개방/폐쇄 원칙 준수
단점
- 상태가 적을 경우나 머신이 거의 변경되지 않을 때 상태 패턴을 적용하는 것은 과도
- 관리해야할 클래스가 늘어 날 수 있음.
예
- javax.faces.lifecycle.LifeCycle#execute() (FacesServlet에 의해 제어됨: 행동은 JSF 생명주기의 현재 단계(상태)에 의존함)
참조
'지식 > 디자인패턴' 카테고리의 다른 글
| Head First Design Patterns : Composite Pattern (0) | 2024.02.25 |
|---|---|
| Head First Design Patterns : Iterator pattern (0) | 2024.02.25 |
| Head First Design Patterns : Template Method Pattern (0) | 2024.01.29 |
| Head First Design Patterns : Facade Pattern (0) | 2024.01.29 |
| Head First Design Patterns : Adapter Pattern (0) | 2024.01.16 |