[java] 스택을 이용한 상태 기반 머신 구현하기

스택은 자료를 저장하고 관리하는 자료구조로, 상태 기반 머신을 구현하는 데에 유용하게 사용될 수 있습니다. 상태 기반 머신은 주어진 입력에 따라 여러 상태를 변경하는 동작을 수행하는 시스템입니다.

스택(Stack) 개념

스택은 후입선출(Last-In, First-Out) 형식으로 동작합니다. 즉, 가장 최근에 삽입한 항목이 가장 먼저 삭제되는 구조입니다. 스택은 push(삽입)과 pop(삭제) 연산을 통해 항목을 관리할 수 있습니다.

상태 기반 머신(State Machine)

상태 기반 머신은 여러 상태와 상태 간의 전이(transition)를 정의하여 동작하는 시스템입니다. 각 상태는 주어진 입력에 따라 다른 상태로 전이할 수 있습니다. 이러한 상태 전이를 관리하기 위해 스택을 사용할 수 있습니다.

Java로 상태 기반 머신 구현하기

다음은 Java 언어를 사용하여 스택을 이용한 상태 기반 머신을 구현하는 예제 코드입니다.

import java.util.Stack;

public class StateMachine {
    private Stack<String> stateStack;

    public StateMachine() {
        stateStack = new Stack<>();
    }

    public void pushState(String state) {
        stateStack.push(state);
    }

    public void popState() {
        stateStack.pop();
    }

    public String getCurrentState() {
        return stateStack.peek();
    }

    public boolean isStateEmpty() {
        return stateStack.isEmpty();
    }

    public static void main(String[] args) {
        StateMachine stateMachine = new StateMachine();

        // 상태 push
        stateMachine.pushState("State A");
        System.out.println("Current State: " + stateMachine.getCurrentState());

        // 상태 push
        stateMachine.pushState("State B");
        System.out.println("Current State: " + stateMachine.getCurrentState());

        // 상태 pop
        stateMachine.popState();
        System.out.println("Current State: " + stateMachine.getCurrentState());

        // 상태 pop
        stateMachine.popState();
        System.out.println("Current State: " + stateMachine.getCurrentState());
        System.out.println("Is State Empty? " + stateMachine.isStateEmpty());
    }
}

위의 예제 코드에서는 Stack<String>을 사용하여 상태 스택을 선언하고, pushState, popState, getCurrentState, isStateEmpty 메서드를 구현하여 스택을 조작합니다. main 메서드에서는 상태를 push하고 pop하여 현재 상태를 출력하고, 상태 스택이 비어있는지 확인합니다.

이와 같은 방식으로 스택을 활용하여 상태 기반 머신을 구현할 수 있습니다.

참고 자료