전통적 상태 패턴은 내부 상태 객체가 동작을 위임받습니다.
state pattern
상태 패턴을 타입으로 옮기기
객체지향 상태 패턴을 러스트에 그대로 옮길 수도 있지만, 상태별 타입을 쓰면 잘못된 전이를 컴파일러가 막습니다.
상태마다 다른 구조체를 반환해 가능한 메서드만 노출합니다.
메서드가 자기 자신을 소비하고 다음 상태 타입을 돌려줍니다.
타입이 늘지만 런타임 분기와 잘못된 호출을 줄일 수 있습니다.