상태 패턴(State Pattern)이란?
상태 패턴은 객체의 내부 상태에 따라 여러 행동을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체의 클래스를 변경하지 않고도 객체의 행동을 변경할 수 있습니다. 상태 패턴은 객체가 내부 상태에 따라 행동을 변경해야 할 때 유용합니다.
상태 패턴은 세 가지 주요 구성 요소로 이루어져 있습니다:
- Context: 사용자에게 유용한 인터페이스를 제공하고, 현재 상태를 정의하는 객체입니다.
- State: 모든 특정 상태의 행동을 캡슐화하는 인터페이스입니다.
- ConcreteState: State 인터페이스를 구현하는 서브클래스로, 특정 상태의 행동을 제공합니다.
예시 코드
다음은 C++로 작성된 간단한 상태 패턴의 예입니다:
#include <iostream>
// State
class State {
public:
virtual ~State() = default;
virtual void handleRequest() = 0;
};
// Concrete States
class ConcreteStateA : public State {
public:
void handleRequest() override {
std::cout << "Handling request by ConcreteStateA.\n";
}
};
class ConcreteStateB : public State {
public:
void handleRequest() override {
std::cout << "Handling request by ConcreteStateB.\n";
}
};
// Context
class Context {
public:
Context(State* state) : state(state) {}
void setState(State* newState) {
state = newState;
}
void request() {
state->handleRequest();
}
private:
State* state;
};
int main() {
ConcreteStateA stateA;
ConcreteStateB stateB;
Context context(&stateA);
context.request(); // Output: Handling request by ConcreteStateA.
context.setState(&stateB);
context.request(); // Output: Handling request by ConcreteStateB.
return 0;
}
위 코드에서 Context는 사용자에게 유용한 인터페이스를 제공하고, 현재 상태를 정의하는 객체입니다. State는 모든 특정 상태의 행동을 캡슐화하는 인터페이스입니다. ConcreteStateA와 ConcreteStateB는 State 인터페이스를 구현하는 서브클래스로, 특정 상태의 행동을 제공합니다.
+-----------------+
| State |
+-----------------+
| handleRequest() |
+-----------------+
^
|
+-----------------+ +-----------------+
| ConcreteStateA | | ConcreteStateB |
+-----------------+ +-----------------+
| handleRequest() | | handleRequest() |
+-----------------+ +-----------------+
^ ^
| |
+-----------------+
| Context |
+-----------------+
| setState() |
| request() |
+-----------------+
이 패턴을 사용하면 객체의 상태에 따라 행동을 쉽게 변경할 수 있습니다. 하지만 이 패턴을 사용하면 코드가
'CS(Computer Science)지식 > [C++] 디자인 패턴' 카테고리의 다른 글
방문자 패턴(Visitor Pattern)이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
---|---|
템플릿 메서드 패턴(Template Method Pattern)이해하기 : 쉽게 설명한 디자인 패턴(C++) (2) | 2024.01.29 |
메멘토 패턴(Memento Pattern)이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
해석자 패턴(Interpreter Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |
명령 패턴(Command Pattern) 이해하기 : 쉽게 설명한 디자인 패턴(C++) (0) | 2024.01.29 |