티스토리 뷰

State Pattern - 디자인 패턴

 
참고서적 :  Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
 
패턴 정의 #12 - 스테이트(state) Pattern
객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다.
마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다.
 
음료수 자판기와 같은 vending machine을 설계할 때, 스테이트 다이어그램을 그려봤을 겁니다.
이러한 경우에 사용하는 디자인 패턴입니다.
 
중첩된 if문으로 각각의 상태를 체크하는 대신,
각각의 상태를 구상 클래스로 정의해서 사용하는 방식입니다.
 
클래스의 개수가 많아질 수 있다는 단점은 있지만.. 상태의 추가에 대한 확장성이 매우 뛰어난 패턴입니다.
스트레티지 패턴과도 형식은 유사하지만, 사용하는 의미가 다르다고 이해하시면 됩니다.
 

클래스 다이어그램은 다음과 같습니다.
 


 
- Context라는 클래스에는 여러 가지 내부 상태가 들어갈 수 있습니다.
- Context의 request() 메소드가 호출되면, 그 작업은 상태 객체에게 맡겨집니다.
- State 인터페이스에서는 모든 구상 상태 클래스에 대한 공통 인터페이스를 정의합니다.
모든 상태 클래스에서 같은 인터페이스를 구현하기 때문에 바꿔가면서 쓸 수 있습니다.
- Concrete State에서는 Context로부터 전달된 요청을 처리합니다.
각 Concrete State에서 그 요청을 처리하는 방법을 자기 나름의 방식으로 구현합니다.
이렇게 하고 Context에서 상태를 바꾸기만 하면 행동도 바뀌게 됩니다.
 
댓글
댓글쓰기 폼