[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를 참조하시기 바랍니다.