상태 패턴이란?
- 상태 패턴을 사용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다.
- 직접 상태를 체크하여 상태에 따른 행위를 호출하는 것이 아닌 상태를 객체화하여 필요에 따라 다르게 행동하도록 위임한다.
- 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.
- 구성을 이용하여 코드 내의 조건문들을 대체한다.
상태 패턴 vs 전략 패턴
- 상태 패턴: 상태 객체에 일련의 행동이 캡슐화된다. Context 객체에서 여러 상태 객체 중 한 객체에게 모든 행동을 맡기게 된다. 객체의 내부 상태에 따라 현재 상태를 나타내는 객체가 바뀌고, 클라이언트는 상태 객체를 몰라도 된다.
- 전략 패턴: 클라이언트가 Context 객체에게 어떤 전략 객체를 사용할지 지정해준다. 서브 클래스를 만드는 방법을 대신하여 유연성을 극대화하는 용도로 사용된다.
참고 사항
- State에 해당하는 클래스를 디자인할 때는 인터페이스 대신 추상 클래스 사용도 생각해보면 좋다. 구상 상태 클래스를 건드리지 않고 추상 클래스에 메소드에 추가하면 되기 때문이다.
장단점
장점
- 새로운 상태가 추가되더라도 Context의 코드가 받는 영향이 최소화된다.
- 클래스를 추가하더라도 기존의 메서드 코드는 그대로 유지된다.
- 상태별 동작을 수정하기 쉽다.
- 조건문이 줄어들어 코드가 간결해지고 가독성이 올라간다.
단점
- 상태에 따른 조건문을 대신한 상태 객체가 증가하여 관리해야 할 클래스의 수가 증가한다.
참고 자료