상태 패턴
- 행동 관련 디자인 패턴.
- 객체 내부 상태 변경에 따라 객체의 행동이 달라지는 패턴.
- 상태에 특화된 행동들을 분리해 낼 수 있으며, 새로운 행동을 가하더라도 다른 행동에 영향을 주지 않는다.
애플리케이션에서 상태 변경에 따라 어떤 특정한 오브젝트들의 행동이 바뀌는 동작을 스테이트 패턴을 통해 구현할 수 있다.
특정한 상태마다 다르게 동작하는 오퍼레이션을 상태 패턴으로 구현하지 않으면 if, else가 잔뜩 들어가게 되고 가독성이 떨어지게 된다.
이럴 때 상태 패턴을 적용하면 좋다.
상태 패턴의 클래스 다이어그램을 살펴보면,
State는 Context가 변경될 수 있는 여러 상태들에 대한 공통된 인터페이스들을 만들어 놓은 것이다.
Context에는 고유의 정보와 상태 변경을 위한 메서드을 담고있는 클래스이다.
Context 클래스가 어떤 행동에 따라 달라지는 operation들을 전부 State를 통해 위임한다.
위임을 하면 특정 상태에 따라 달라지는 operation들의 구체적인 로직은 ConcreteState에서 구현할 것이다.
상태 패턴의 장점
1. 상태에 따른 동작을 개별 클래스로 옮겨서 관리할 수 있다.
2. 기존의 특정 상태에 따른 동작을 변경하지 않고 새로운 상태에 다른 동작을 추가할 수 있다.
3. 코드 복잡도를 줄일 수 있다.
https://refactoring.guru/ko/design-patterns/state
상태 패턴과 전략 패턴 차이점
https://stackoverflow.com/a/16058371
There can be a major difference, however, if ConcreteStates decide themselves the state transitions (see the "might determine" associations in the diagram above).
차이점은 다음과 같다.
State는, State에 따른 로직의 끝에, setState(new State())를 호출함으로써
State를 스스로 변환할 수 있는데 반해,
Strategy의 경우 외부에서 데이터의 입력이 필요하다.
따라서 다음과 같이 정리할 수 있다.
Strategy Pattern : 행동(알고리즘)을 소유한 객체를 실행 시에 선택할 수 있게 하여 상황에 맞는 행동을 하게 하는데 유용
-> 다양한 알고리즘이 짜증나는 경우 고려
State Pattern : 다양한 상태변화(전이)가 아주 복잡한 로직을 제어하는 데 유용
-> if, else 문에 의한 분기점이 많아 복잡한 경우 고려
'프로그래밍 강의 메모 > 코딩으로 학습하는 GoF의 디자인 패턴_백기선' 카테고리의 다른 글
행동 관련 디자인 패턴 > 템플릿 메서드 패턴(Template Method Pattern) (0) | 2022.05.27 |
---|---|
행동 관련 디자인 패턴 > 전략 패턴(Strategy Pattern) (0) | 2022.05.27 |
행동 관련 디자인 패턴 > 옵저버 패턴(Observer Pattern) (0) | 2022.05.26 |
행동 관련 디자인 패턴 > 메멘토 패턴(Memento Pattern) (0) | 2022.05.26 |
행동 관련 디자인 패턴 > 중재자 패턴(Mediator Pattern) (0) | 2022.05.26 |