관련 코드는 10장. 상태 디자인 패턴를 참조
10장. 상태 디자인 패턴(The State Design Pattern)
10.1 상태 디자인 패턴 개요
- 객체의 역할에 중점을 둠
- 객체는 내부 상태에 따라 여러 행위를 캡슐화함
- 런타임에 객체의 행위를 변경
- 행위 디자인 패턴의 한 종류이며 상태를 사타내는 객체 패턴(The Objects for States Pattern)이라고도 불림
- Finite State Machine(FST)를 개발하거나 트랜잭션을 구현할 때 적합
10.2 상태 디자인 패턴 이해
10.2.1 상태 디자인 패턴의 3가지 요소
- State
객체의 행위를 캡슐화하는 인터페이스. 행위는 객체의 상태에 따라 변함 - ConcreteState
인터페이스를 구현하는 서브클래스. 특정 상태의 객체의 행위를 구현 - Context
사용자가 선택한 인터페이스를 정의. ConcreteState의 인스턴스를 가지고 있음
10.3 상태 디자인 패턴의 장단점
10.3.1 장점
- 반복적인 if/else 연산자를 줄일 수 있음
- 다형성(Polymorphic) 구현이 쉬우며 새로운 상태를 쉽게 추가할 수 있음
반복적으로 if/else 사용 X - 상태 관련 행위가 모두
ConcreteState
클래스에 있으므로 응집도(cohesion)이 높아짐 - 새로운
ConcreteState
클래스를 추가해 쉽게 신규 기능을 구현할 수 있음
코드의 유연성이 높아지고 유지보수가 쉬움
10.3.2 단점
- 클래스 남발(Class explosion) 발생
- 새로운 행위가 추가될 때마다
Context
클래스도 맞게 수정할 필요가 있음.Context
는 행위가 추가될 때마다 취약해짐
PREVIOUSEtc