state pattern

러스트 상태 패턴은 런타임 유연성과 타입 안전성 사이에서 고른다

전통적인 상태 패턴은 trait object로 전이를 숨기고, 타입 상태 패턴은 컴파일 타임에 잘못된 순서를 막는다.

trait object

전통 상태 패턴

상태 객체가 전이 로직을 갖고 Post는 현재 상태에 요청을 위임한다.

runtime state
encap

전이 캡슐화

request_review, approve 같은 규칙을 상태 구현체 안에 숨긴다.

hidden rule
tradeoff

문자열 노출 제어

초안과 검토 중에는 content를 비워 두는 정책을 상태별로 둔다.

behavior switch
typed

타입 상태 대안

DraftPost, PendingPost, Post처럼 타입을 바꿔 잘못된 호출을 컴파일에서 막는다.

compile proof
choose

선택 기준

상태가 자주 추가되면 객체 패턴, 전이 순서가 엄격하면 타입 상태가 유리하다.

design fit