상태 패턴
- 특정한 상태에 따라 행동이 달라지는 객체들을 위한 패턴
ex) 리모컨(TV가 꺼저 있냐 켜져 있냐에 따라 버튼의 동작이 달라짐)
※ 상태마다 다르게 적용하는 오퍼레이션일 때 상태 패턴을 적용하기가 적합하다
※ 리팩터링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'
상태(state) 패턴이 필요한 상황
- 상태 마다 다른 코딩을 한 클래스 파일에 작성하게 되면 복잡해서 가독성이 떨어지기 때문에 이를 분리하여 쉽게 코드를 읽을 수 있다.
- 상태마다 다르게 동작하는 오퍼레이션이 있을 때 상태 패턴을 적용하여 구분하여 사용함
OnlineCourse = Context와 같다
- 상태 변경을 위한 메서드
- context가 행동에 따라 달라지는 오퍼레이션들을 state를 통해 위임을 함(state)
- 특정 상태에 따라 변경되는 것들은 실질적으로는 concreteState(=Draft, published, private)에서 구현함
상태 패턴의 장/단점
장점
- 한 곳에 뭉쳐 있던 상태에 따른 여러가지 동작들을 개별 클래스로 옮겨서 관리할 수 있다.
- 기존의 특정 상태에 따른 동작을 변경하지 않고 새로운 상태에 다른 동작을 추가할 수 있다.
- 코드 복잡도를 줄일 수 있다.
단점
- 복잡도가 증가한다.
- 상태를 나눌 때 불필요한 경우에도 나누게될 수도 있다.