[Java] 상태 패턴(State Pattern)

Junseo Kim·2021년 3월 10일
0

[디자인 패턴]

목록 보기
2/3

객체가 상태에 따라 행위를 달리하도록 하는 패턴. 상태가 행위를 하게한다. 동일한 동작을 객체의 상태에 따라 다르게 처리해야할 때 사용한다.

상태(State)를 인터페이스로 캡슐화한다. 내부에 상태에 따라 다르게 행동할 동작을 정의해준다.

public interface PowerState {
    PowerState pushButton();
}

필요한 상태 객체들이 해당 State를 구현하게 만들어준다.

public class On implements PowerState {
    @Override
    public PowerState pushButton() {
        System.out.println("전원이 꺼졌습니다.");
        return new Off();
    }
}
public class Off implements PowerState {
    @Override
    public PowerState pushButton() {
        System.out.println("전원이 켜졌습니다.");
        return new On();
    }
}

객체는 State를 가지고 있으면서 State에 따라 동작이 달라지게 된다.

public class TV {
    private PowerState state;

    public TV() {
        this.state = new Off();
    }

    public void pushButton() {
        state = state.pushButton();
    }
}

클라이언트에서 아래와 같이 사용할 수 있다.

public class Application {
    public static void main(String[] args) {
        TV tv = new TV();
        tv.pushButton(); // 전원이 켜졌습니다.
        tv.pushButton(); // 전원이 꺼졌습니다.
    }
}

전략 패턴과 비슷한 구조이지만 전략 패턴은 상속을 대체하려는 목적, 상태 패턴은 조건문들을 대체하려는 목적으로 사용한다고 한다.

참고
[디자인패턴] 스테이트 패턴 ( State Pattern )

0개의 댓글