언린이 2021. 10. 12. 09:43

State 패턴은 객체가 특정 상태에 따라 행위를 달리하는 상황에서, 자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고 각 상태를 객체화하여 각 상태에게 행위를 위임하는 패턴입니다.

 

 

구조

  • State
    • 시스템의 모든 상태에 공통 인터페이스를 제공합니다. 따라서 이 인터페이스를 실체화한 어떤 상태 클래스도 기존 상태 클래스를 대신해 교체해서 사용이 가능합니다.
  • State1, State2, State3
    • Context 객체가 요청한 작업을 자신의 방식으로 정의하여 실제로 수행하는 클래스입니다.
  • Context
    • State를 이용하는 역할을 수행합니다. 현재 시스템의 상태를 나타내는 상태 변수와 실제 시스템의 상태를 구성하는 여러가지 변수가 있습니다. 또한 각 상태 클래스에서 상태 변경을 요청해 상태를 바꿀 수 있도록 하는 메서드(setState)를 제공합니다. Context 요소를 구현한 클래스의 request 메서드는 실제 행위를 실행하는 대신 해당 상태 객체에 행위 실행을 위임합니다.

 

 

활용 상황

  • 클래스에서 동일 계열의 상태들에 따라 조건문이 많아질때 유용합니다.

 

 

State 패턴의 장단점

  • 장점
    • 상태 종류 증가에 따라 길어지는 조건문을 제거할 수 있고 가독성 좋은 코드를 구현할 수 있습니다.
    • 상태와 행위를 묶기 때문에 클래스 자체는 상태에 따른 행동 구현과 분리됩니다.
  • 단점
    • 상태 종류에 따라 클래스가 늘어납니다.
    • 상태와 행동에 강력한 결합이 생깁니다.