파이썬 디자인 패턴 - 10. 상태 패턴

 

관련 코드는 10장. 상태 디자인 패턴를 참조


10장. 상태 디자인 패턴(The State Design Pattern)

10.1 상태 디자인 패턴 개요

  1. 객체의 역할에 중점을 둠
    • 객체는 내부 상태에 따라 여러 행위를 캡슐화함
    • 런타임에 객체의 행위를 변경
  2. 행위 디자인 패턴의 한 종류이며 상태를 사타내는 객체 패턴(The Objects for States Pattern)이라고도 불림
  3. Finite State Machine(FST)를 개발하거나 트랜잭션을 구현할 때 적합


10.2 상태 디자인 패턴 이해

10.2.1 상태 디자인 패턴의 3가지 요소

  1. State
    객체의 행위를 캡슐화하는 인터페이스. 행위는 객체의 상태에 따라 변함
  2. ConcreteState
    인터페이스를 구현하는 서브클래스. 특정 상태의 객체의 행위를 구현
  3. Context
    사용자가 선택한 인터페이스를 정의. ConcreteState의 인스턴스를 가지고 있음


10.3 상태 디자인 패턴의 장단점

10.3.1 장점

  1. 반복적인 if/else 연산자를 줄일 수 있음
  2. 다형성(Polymorphic) 구현이 쉬우며 새로운 상태를 쉽게 추가할 수 있음
    반복적으로 if/else 사용 X
  3. 상태 관련 행위가 모두 ConcreteState 클래스에 있으므로 응집도(cohesion)이 높아짐
  4. 새로운 ConcreteState 클래스를 추가해 쉽게 신규 기능을 구현할 수 있음
    코드의 유연성이 높아지고 유지보수가 쉬움

10.3.2 단점

  1. 클래스 남발(Class explosion) 발생
  2. 새로운 행위가 추가될 때마다 Context 클래스도 맞게 수정할 필요가 있음. Context는 행위가 추가될 때마다 취약해짐