"어떤 객체의 상태에 따라 행위가 변경되는 경우 유용한 패턴" (출처:https://refactoring.guru/design-patterns/state)
- context의 상태에 따른 처리가 구분되는 경우 해당 구분로직을 context에 하드 코딩하게 되면 경우 확장성이 떨어진다.
- 상태를 클래스화 하고 해당 동작들을 넣는다
- 원래의 객체(context)는 현재 상태 객체의 참조를 가진다
- context는 2개 이상의 상태를 동시에 가질 수는 없다
- State 패턴은 Strategy 패턴과 유사하다. 주요한 차이점은 상태객체들은 서로의 존재를 아는 반면 Strategy패턴에서는 Strategy간의 관련성은 없다는 것이다(https://refactoring.guru/design-patterns/state)
- Context : 상태를 가지고있는 객체(Package.java)
- State : Context의 상태(OrderedState.java, DelieveredState.java, ReceivedState.java)
