Design Pattern

[디자인 패턴] 상태 패턴 (State Pattern)

꾸준함. 2024. 7. 3. 18:38

상태 패턴

  • 객체의 상태에 따라 동작을 다르게 하는 객체 지향 디자인 패턴
  • 해당 패턴 적용 시 상태를 객체로 캡슐화하여 상태 전환을 쉽게 관리할 수 있으며, 조건문을 사용하지 않고 객체의 행동을 변경 가능

 

https://en.wikipedia.org/wiki/State_pattern

 

주요 구성 요소

 

1. Context

  • 상태를 갖는 객체
  • 상태 변경을 위한 인터페이스를 제공하고 현재 상태를 유지

 

2. State

  • 상태를 나타내는 인터페이스 혹은 추상 클래스
  • 특정 상태에 따른 행동 정의

 

3. ConcreteState

  • State 인터페이스 구현체
  • 각 상태에 따른 행동 정의

 

상태 패턴 동작 방식

  • Context는 State 인터페이스를 통해 현재 상태 객체 호출
  • 상태 전환 필요할 때 Context는 현재 상태를 다른 상태로 교체
  • 각 ConcreteState 클래스는 Context의 상태 변경을 유발할 수 있음

 

상태 패턴 구현 예시

 

1. State 인터페이스

 

 

2. ConcreteState 클래스

 

 

3. Context 클래스

 

 

4. 클라이언트 코드

 

 

상태 패턴 장단점

 

장점

  • 상태에 따른 동작을 개별 클래스로 옮겨 관리 가능 (SOLID의 SRP 원칙)
  • 기존의 특정 상태에 따른 동작을 변경하지 않으면서 새로운 상태에 따른 동작 추가 가능 (SOLID의 OCP 원칙)

 

단점

  • ConcreteState가 늘어남에 따라 클래스 수가 많아져 관리 포인트가 늘어나고 복잡도 증가

 

참고

코딩으로 학습하는 GoF의 디자인 패턴 - 백기선 강사님

반응형