Purpose of State Pattern (상태 패턴의 목적)
- Ties object circumstances to its behavior, allowing the object to behave in different ways based upon its internal state.
- 내부 상태에 따라 다르게 동작할 수 있도록!
Design Principle (디자인원칙)
- OCP : Open-Closed Principle
State pattern (상태 패턴)
- Define a State interface that contains a method for every action.
- Get rid of all of our conditional code and instead delegate to the state object to do the work for us.
- 모든 작업에 대한 메서드가 포함된 상태 인터페이스 정의
- 모든 조건부 코드를 제거하고 대신 상태 객체에 위임하여 작업을 수행
→ The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.
Related Patterns
- State vs Strategy : composition with delegation을 쓰는 건 동일함!
State
→ Encapsulates a state-dependent behavior and delegate behavior to the current states
→ 상태 패턴은 state object를 encapsulate 하고, 동작을 위임한다면
Strategy
→ Encapsulate interchangeable behaviors and use delegation to decide which behavior to use
→ 전략 패턴은 algorithm을 encapsulate 하는 것으로
〓▶ class diagram에는 큰 차이가 없지만, 의도가 문제 해결 목적이 다름!
Quiz) 은행계좌(BankAccount)에는 다음과 같은 세 가지의 상태(NoTransactionFeeState / TransctionFeeState / OverdrawnState)가 있고, 입금 (deposit) 혹은 출금(withdraw)에 따라 상태의 전환이 된다.
해당 문제를 State 패턴을 이용하여 설계하고 BankAccount 클래스의 핵심적인 코드 골격을 제시하시오. (Object Composition과 Delegation 반드시 표시)
public BankAccount {
State currState;
public performDepoxit(int amount) {
currState.deposit(amount);
}
public performWithdraw(int amount) {
currState.withdraw(amount);
}
}
QUIZ) 다음 각 문장이 옳은지 O/X 로 답하시오
(X) 상태 패턴(State Pattern)을 적용할 때 구체(Concrete) 상태클래스는 context 개체에 대한 참고(reference)를 가져서는 안된다
→Create all ConcreteState objects once and have the Context Object keep references to them.
(X) 상태 패턴(State Pattern)은 객체합성 (Object Composition)과 위임 (Delegation)을 통해 동작한다.
본 글은 개인의 S/W 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
'SW 공부 > Design Patterns' 카테고리의 다른 글
[디자인패턴] Factory Method Pattern & Abstract Factory Pattern (팩토리 메서드 패턴 & 추상 팩토리 패턴) (2) | 2022.08.28 |
---|---|
[디자인패턴] Mediator pattern (중재자 패턴) (2) | 2022.08.28 |
[디자인패턴] Iterator pattern (반복자 패턴) (2) | 2022.08.28 |
[디자인패턴] Template method pattern (템플릿 메소드 패턴) (2) | 2022.08.28 |
[디자인패턴] Observer Pattern(옵저버 패턴) (2) | 2022.08.27 |
댓글