-
[Design Pattern] 스테이트 패턴(State Pattern)Software Engineering 2020. 5. 31. 19:59728x90
State Pattern
- 행위 패턴
- 상태에 따라 동일한 작업이 다른 방식으로 실행될 때 해당 상태가 작업을 수행하도록 위임하는 패턴
- 시스템의 각 상태를 클래스로 분리하고 각 클래스에서 수행하는 행위들을 메서드로 구현
- 외부로부터 캡슐화하기 위해 인터페이스를 만들어 시스템의 각 상태를 나타내는 클래스로 실체화
역할이 수행하는 작업
- 시스템의 모든 상태에 공통의 인터페이스를 제공
- 인터페이스를 실체화한 상태 클래스는 기존 상태 클래스를 대신해 교체해서 사용 가능
State
- Context 객체가 요청한 작업을 자신의 방식으로 실행
- 대부분의 경우 다음 상태를 결정해 상태 변경을 Context 객체에 요청하는 역할도 수행
ConcreteState
- State를 이용하는 역할을 수행
- 현재 시스템의 상태를 나타내는 상태 변수와 실제 시스템의 상태를 구성하는 여러 가지 변수가 존재
- 각 상태 클래스에서 상태 변경을 요청해 상태를 바꿀 수 있는 메서드(setState)가 제공됨
- Context 요소를 구현한 클래스의 행위 메서드는 실제 행위를 실행하는 대신 해당 상태 객체에 행위 실행을 위임
Context
스트래티지 패턴 비교
공통점
- 행위를 별도의 클래스로 캡슐화
- 캡슐화한 실제 클래스에 작업수행을 위임
- 실행중에 행위가 변경될 수 있음
차이점
- 행위의 변경 빈도
- 스트래티지는 자주 변경되지 않음
- 스테이트는 자주 변경됨
- 행위를 변경하는 주체
- 스트래티지는 Context를 실행하는 Client 클래스가 수행
- 스테이트는 상태에 대한 행위를 구현한 클래스에서 각각 수행
728x90'Software Engineering' 카테고리의 다른 글
[Design Pattern] 옵서버 패턴(Observer Pattern) (0) 2020.06.06 [Design Pattern] 커맨드 패턴(Command Pattern) (0) 2020.06.01 [Design Pattern] 싱글턴 패턴(Singleton Pattern) (0) 2020.05.29 [Design Pattern] 스트래티지 패턴(Strategy Pattern) (0) 2020.05.28 Design Pattern이란? (0) 2020.05.27