Development/디자인 패턴

[수정중] 헤드퍼스트 디자인 패턴 [10]

s3ich4n 2018. 1. 9. 19:05

헤드퍼스트 디자인 패턴[10]


  1. 스테이트 패턴


상태를 나타내는데 유용한 패턴. 사용자가 어떤 행동을 하는 것에 대해 적절한 행동을 취하게 하도록 돕는다. 


state machine 구현하는 방법:

  1. 상태를 모은다. (책의 예시에선 4가지 상태가 있음)
  2. 현재 상태를 저장하기 위한 인스턴스 변수를 만들고 상태값을 정의한다.
    상태마다 정수를 부여, 현재상태를 저장하는 인스턴스 변수도 생성
  3. 시스템에서 일어날 있는 모든 행동을 정의.
    행동들에 대해 상태가 변하는 것을 있음. -> 뽑기 기계에 대한 인터페이스
  4. state machine 역할을 하는 클래스를 생성.
    메소드 내에서는 조건문에 따른 다양한 상황에 대한 처리가 가능.



책의 첫번째 예제의 단점! 전혀 객체지향적이지 않은 소스코드!


OCP 지키지 않았다.

상태전환이 조건문 속에 숨어있고 드러나있지 않다.

바뀌는 부분에 대해 캡슐화가 되어있지 않다.

다른 기능에 대해 추가/삭제시 버그발생 확률이 매우높다.


-> 새로운 디자인 고안!


  • 뽑기기계와 관련있는 모든 행동에 대한 메소드가 들어있는 State 인터페이스를 고안
  • 기계의 모든 상태에 대해 상태 클래스를 구현. 특정상태에 대한 행동 구현
  • 조건문 코드를 모두 없애고 상태 클래스에 작업을 위임.


이것이 바로 스테이트 패턴!


스테이트 패턴: 객체의 내부상태가 바뀜에 따라서 객체의 행동을 바꿀 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 있다.