상태 패턴(State Pattern)

seunghyun lee·2022년 7월 27일
0

Computer Science

목록 보기
15/19
post-thumbnail

상태 패턴

  • 행위 패턴
  • 일련의 규칙에 따라 객체 내부의 상태를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴
  • 특정 기능을 수행한 후 다음 상태를 반환한다.

State Interface

  • Context의 각 상태별 행동을 정의한다.

State implements interface

  • Context 객체가 요청한 작업을 override하여 실행한다.
  • 다음 상태를 결정해 상태 변경을 Context 객체에 요청하는 역할을 수행한다

Context:

  • 사용자가 관심 있는 인터페이스를 정의한다.
  • 객체의 각 상태를 정의한 State의 구현체 인스턴스를 관리한다.

상태 패턴 예시

  • 돈을 받아 음료수를 뽑을 수 있는 음료 자판기를 만든다고 가정한다
  • 자판기는 두 개의 상태를 갖는다.
  1. 돈을 받았다.
    • 돈을 더 받아도 상태는 변하지 않는다.
    • 음료를 뽑을 수 있다.
    • 음료를 뽑으면 돈을 받지 않는 상태로 변한다.
  2. 돈을 받지 않았다.
    • 돈을 받으면 상태가 변한다.
    • 음료를 뽑으려 해도 상태는 변하지 않는다.
    • 돈을 받기를 기다린다.

상태 패턴 장단점

장점

  • 상태가 많아지더라도 코드의 복잡도가 증가하지 않는다.
  • 클래스를 추가하여도 기존의 메서드 코드가 유지된다.
  • 상태별 동작을 수정하기 쉽다.

단점

  • 상태 구현 클래스가 많아지면 변경 규칙을 파악하기 어렵다.
  • 한 상태 클래스에서 다른 상태 클래스에 대한 의존도가 발생할 수 있다.

상태 패턴 vs 전략 패턴

공통점

  • 구조는 동일
  • 인터페이스를 사용하여 구현 클래스를 캡슐화한다.
  • 구현 클래스의 영향을 받지 않고 유연한 변경에 대처가 가능하다.

차이점

  • 전략 패턴은 한 번 인스턴스를 생성하고, 상태가 거의 바뀌지 않을 때 사용한다.
  • 상태 패턴은 한 번 인스턴스를 생성하고, 상태가 빈번하게 바뀌는 경우에 사용한다.
  • 상태 패턴은 State스스로를 변환할 수 있지만, 전략패턴은 외부에서 입력이 필요하다.
  • 즉, 상태 패턴에서는 객체 내부 상태에 따라 현재 상태를 나타내는 객체가 바뀌고, 그 결과 context 객체의 행동도 바뀐다.

0개의 댓글