[java] 스테이트 패턴

소프트웨어 개발에서 유용한 디자인 패턴 중 하나인 스테이트 패턴(State Pattern)은 객체의 상태에 따라 동작을 변경할 수 있는 패턴입니다. 이 패턴을 사용하면 객체의 상태를 캡슐화하고, 상태에 따라 메서드를 동적으로 변경할 수 있습니다.

스테이트 패턴의 구성 요소

콘텍스트(Context): 스테이트 객체를 가지고 있는 클래스로, 현재 상태와 관련된 작업을 수행합니다.

스테이트(State): 인터페이스를 구현하는 클래스로, 콘텍스트의 상태에 따라 다른 동작을 정의합니다.

콘크리트 스테이트(Concrete State): 스테이트를 구현한 클래스로, 각각의 상태에 따른 특정 동작을 정의합니다.

예시

아래는 Java에서의 스테이트 패턴을 사용한 간단한 예시입니다.

// 스테이트 인터페이스
public interface State {
    void doAction(Context context);
}

// 콘크리트 스테이트 클래스들
public class StartState implements State {
    public void doAction(Context context) {
        System.out.println("시스템이 시작 상태입니다.");
        context.setState(this);
    }
}

public class StopState implements State {
    public void doAction(Context context) {
        System.out.println("시스템이 정지 상태입니다.");
        context.setState(this);
    }
}

// 콘텍스트 클래스
public class Context {
    private State state;

    public void setState(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }
}

결론

스테이트 패턴은 객체 지향 소프트웨어 디자인에서 유연하고 확장 가능한 소프트웨어를 개발하는 데 도움이 될 수 있습니다. 이 패턴을 사용하면 상태를 캡슐화하여 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

더 많은 정보를 원하시면 Gang of Four의 Design Patterns: Elements of Reusable Object-Oriented Software를 참조하시기 바랍니다.