728x90
State Pattern은 무엇인가요?
- 상태에 따라 동일한 작업이 다른 방식으로 실행될 때 해당 상태가 작업을 수행하도록 위임하는 디자인 패턴
- Context, State, Concrete class 개념
- Context
- 상호 작용할 클라이언트에 대한 인터페이스를 정의
- 객체의 현재 상태를 정의하는 데 사용할 수 있는 구체적인 상태 객체에 대한 참조 유지
- State
- 각 구체적인 상태가 수행해야 할 작업을 선언하기 위해 인터페이스 정의
- Concrete
- State에 정의된 메서드에 대한 구현을 제공
- Context
- Context, State, Concrete class 개념
- 객체의 내부 상태가 변경될 때, 객체가 동작을 변경할 수 있는 패턴
- 객체가 클래스를 변경하는 것으로 보임
- 알림 “상태”에 따라 알림을 수행할 때 모바일의 “동작”이 변경된다.
- 상태가 vibration이면 진동이 울림
- 상태가 silence면 무음처리됨
State Pattern은 언제 사용하나요?
- 상태를 기반으로 object의 behavior가 변경되는 경우
- 상태 종류가 매우 많아 if/else 구문에 의해 코드가 복잡해질 경우 가독성 떨어질 위험
- state별 코드가 자주 변경되는 경우
State Pattern을 사용함으로써 장단점이 무엇이 있을까요?
장점
- 상태별 동작을 유지
- 모든 상태 전환을 명시적으로 만듬
- behavior가 상태에 따라 런타임에 변경되어 if/else 또는 switch/case 문에 대한 의존성 제거
- TV 전원을 껐다 켰다할 때 if/else로 구현할 수 있는데 그렇게 안함
- cohesion(응집성)을 개선한다.
- 특정 상태별 behavior들은 ConcreteState class에 모여있기 때문이다.
단점
- 상태 간의 전환을 구현할 때 상태를 하드코딩 하게 함
- 그러나 필요와 요구 사항에 따라 문제가 되거나 안될 수도 있음
- state class가 뚜렷하게 분리되어있는 것이 장점이자 단점
- 즉, 단점은 계층 수가 늘어나기 때문에 복잡해질 수 있음
Strategy Pattern과 State Pattern의 차이는 뭘까요?
- 구조가 유사하고 OCP 원칙을 기반으로 하지만 intent는 완전히 다름!!!
💡 strategy는 여러 전략이 존재하여 클라이언트가 어떤 전략이 있는지 알고 전략을 바꾸는 것 state는 클라이언트가 어떻게 변경될 지 모르지만 내부에서 상태에 따라 행동을 달리하고 변경시키고 하는 것임
- state 패턴은 객체가 상태를 관리하고, 즉, 객체가 행동의 변화를 주도 strategy 패턴은 클라이언트가 behavior를 결정, 클라이언트가 행동의 변화를 주도
- strategy 패턴은 client가 context에 다른 전략을 제공함 state 패턴은 Context나 State 각각이 상태를 관리함
- state 패턴은 object의 상태를 캡슐화 strategy 패턴은 알고리즘이나 strategy를 캡슐화
- state 패턴은 한 상태에서 다른 상태로 전환 strategy 패턴은 strategy를 객체의 매개 변수로 전달할 수 있음
ex) Collections.sort()에서의 Comparator - state 패턴은 상태 변경이 컨텍스트 또는 상태 개체 자체에 의해 수행됨 strategy 패턴은client에 의해 strategy가 수정됨
REFERENCES
728x90
'Design Pattern' 카테고리의 다른 글
Decorator Pattern (0) | 2022.11.06 |
---|---|
Template Callback Pattern (0) | 2022.11.01 |
Singleton Pattern (0) | 2022.03.17 |
Command Pattern (0) | 2022.03.15 |
Strategy Pattern (0) | 2022.03.04 |