상태 값을 Box<dyn State>로 감싸 런타임에 다른 구현으로 교체합니다.
state pattern
상태 패턴을 러스트답게 옮기는 선택지
객체 지향 상태 패턴은 트레이트 객체로 상태별 동작을 숨길 수 있지만, 러스트에서는 타입 시스템으로 잘못된 상태 전이를 막는 방식도 선택할 수 있습니다.
request_review와 approve가 현재 상태에 따라 다음 상태를 반환합니다.
DraftPost, PendingReviewPost처럼 타입을 나누면 잘못된 메서드 호출을 컴파일 때 막습니다.
유연성이 중요하면 동적 상태, 컴파일 타임 보장이 중요하면 타입 상태가 유리합니다.