상태 패턴

@VERO
Created Date · 2023년 03월 10일 02:03
Last Updated Date · 2023년 03월 12일 09:03

상태 패턴이란?

  • 상태 패턴을 사용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다.
  • 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아닌 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임한다.
  • 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.
  • 구성을 이용하여 코드 내의 조건문들을 대체한다.

상태 패턴 vs 전략 패턴

  • 상태 패턴: 상태 객체에 일련의 행동이 캡슐화된다. Context 객체에서 여러 상태 객체 중 한 객체에게 모든 행동을 맡기게 된다. 객체의 내부 상태에 따라 현재 상태를 나타내는 객체가 바뀌고, 클라이언트는 상태 객체를 몰라도 된다.
  • 전략 패턴: 클라이언트가 Context 객체에게 어떤 전략 객체를 사용할지 지정해준다. 서브 클래스를 만드는 방법을 대신하여 유연성을 극대화하는 용도로 사용된다.

참고 사항

  • State에 해당하는 클래스를 디자인할 때는 인터페이스 대신 추상 클래스 사용도 생각해보면 좋다. 구상 상태 클래스를 건드리지 않고 추상 클래스에 메소드에 추가하면 되기 때문이다.

장단점

장점

  • 새로운 상태가 추가되더라도 Context의 코드가 받는 영향이 최소화된다.
  • 클래스를 추가하더라도 기존의 메서드 코드는 그대로 유지된다.
  • 상태별 동작을 수정하기 쉽다.
  • 조건문이 줄어들어 코드가 간결해지고 가독성이 올라간다.

단점

  • 상태에 따른 조건문을 대신한 상태 객체가 증가하여 관리해야 할 클래스의 수가 증가한다.

참고 자료

  • 헤드 퍼스트 디자인 패턴 Ch.10
  • tecoble