객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다.
마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.
상태 패턴은 객체의 상태에 따라서 행동을 분리하여 캡슐화합니다.
객체의 내부 상태 변화에 따라 해당 상태에 맞는 동작을 실행하며, 상태 변경 시에 객체의 클래스를 변경하지 않고 새로운 상태 클래스를 추가함으로써 확장성과 유지보수성을 높일 수 있습니다.

전략패턴은 처음 배웠던 디자인패턴이다. (기억이 나지 않는다면 [링크])
| 특성 | 상태 패턴 | 전략 패턴 |
|---|---|---|
| 목적 | 객체의 내부 상태에 따른 동작을 관리 및 캡슐화 | 다양한 알고리즘을 동적으로 교체 가능하게 함 |
| 구조 | 상태 객체와 컨텍스트 객체 사이의 관계 구성 | 전략 객체와 컨텍스트 객체 사이의 관계 구성 |
| 변경 용이성 | 내부 상태 변경 시, 해당 상태 클래스만 변경 | 알고리즘 변경 시, 새로운 전략 클래스 추가 |
| 실행 시점 | 객체의 내부 상태 변화 시 | 실행 시에 적절한 전략 선택 |
| 응용 예시 | 주문 처리, 자판기 등 | 정렬 알고리즘, 데이터 변환 등 |
| 주요 이점 | 유한한 상태 관리, 코드 중복 감소 | 알고리즘 교체 용이성, 코드 재사용 |
| 주요 한계 | 상태가 많아질수록 클래스 수가 증가 | 많은 전략이 추가될 경우 클래스 수가 증가 |
HeadFirst DesignPattern - 한빛미디어