[c++] 조건문을 활용한 상태 기반 시스템

상태 기반 시스템(State Machine)은 프로그램이 여러 상태를 가지고 있고, 입력 및 조건에 따라 상태를 바꾸는 방식을 말합니다. C++를 사용하여 상태 기반 시스템을 구현하는 방법에 대해 알아보겠습니다.

클래스를 활용한 상태 기반 시스템

C++ 클래스는 상태와 그에 따른 동작을 캡슐화하는 데 이상적입니다. 각 상태를 클래스로 정의하고, 해당 클래스에는 상태에 따른 동작을 나타내는 메서드를 구현합니다.

class State {
public:
    virtual void handleInput() = 0;
    virtual void updateState() = 0;
    virtual void renderState() = 0;
};

class StateA : public State {
public:
    void handleInput() {
        // StateA에 대한 입력 처리
    }

    void updateState() {
        // StateA에 대한 상태 업데이트
    }

    void renderState() {
        // StateA에 대한 렌더링
    }
};

class StateB : public State {
public:
    void handleInput() {
        // StateB에 대한 입력 처리
    }

    void updateState() {
        // StateB에 대한 상태 업데이트
    }

    void renderState() {
        // StateB에 대한 렌더링
    }
};

위 예제에서 각 상태(StateA, StateB)는 상태를 나타내는 클래스로 정의되며, 해당 클래스에서는 입력 처리, 상태 업데이트, 렌더링에 대한 메서드를 구현합니다.

조건문을 활용한 상태 전이

상태 전이는 입력 또는 조건에 따라 현재 상태를 변경하는 과정을 말합니다. 이를 구현하기 위해 각 상태 클래스에서 조건문을 활용하여 상태 전이를 처리할 수 있습니다.

class StateMachine {
private:
    State* currentState;

public:
    void changeState(State* newState) {
        if (currentState) {
            // 이전 상태 정리 코드
        }
        currentState = newState;
        // 새로운 상태 초기화 코드
    }

    void update() {
        currentState->handleInput();
        currentState->updateState();
        currentState->renderState();
    }
};

위 예제에서 StateMachine 클래스에는 현재 상태를 나타내는 포인터가 있으며, changeState 함수를 통해 새로운 상태로 전이할 수 있습니다. 또한 update 함수를 통해 현재 상태의 입력 처리, 상태 업데이트, 렌더링을 순차적으로 수행합니다.

이와 같은 방식으로 C++를 활용하여 상태 기반 시스템을 구현할 수 있습니다. 이러한 설계는 프로그램이 여러 상태를 가지고 있고, 각 상태에 대한 동작이 명확하게 나눠져야 할 때 유용합니다.

참고 자료