Literal — 정확한 값, 단순 타입 X
가끔 "문자열" 이 충분히 정밀하지 않아 — "정확히 이 문자열들 중 하나" 말하고 싶음. 파라미터 타입으로 Literal["red", "green", "blue"] 가 타입 체커가 그 셋만 받게. status enum-as-string, mode 플래그, 고정 set 에서 선택하는 모든 거에 유용.
Final — 재할당 X
Final 이 변수, 속성, 클래스가 재할당 또는 서브클래싱 의도 X 라고 타입 체커한테. MAX_SIZE: Final = 100. 모듈 후반 MAX_SIZE = 200 이 타입 에러. 상수와 sentinel 에 유용 — 의도 전달 + 타입 체커 강제 가능.
ClassVar — 클래스 속성, 인스턴스 X
클래스 본문에서 x: int 가 디폴트로 인스턴스 속성 (모든 인스턴스 가짐) 처리. x: ClassVar[int] 가 클래스 속성 (인스턴스 간 공유) 라고 타입 체커한테. dataclass 에서 특히 중요 — 클래스 레벨 상수 vs 인스턴스별 필드 구분 의미 있음.
Annotated — 타입에 메타데이터 부착
Annotated[int, "the user id"] 가 런타임에 int 와 같은 타입, 메타데이터 부착. Pydantic, FastAPI, 검증 라이브러리들이 새 타입 alias 안 만들고 제약 (min/max, regex 등) 인코딩에 많이 사용.
Pythonic Way: 문자열 또는 int 가 사실 고정 set 의 하나일 때
Literal 손에 닿아. 오타 ("warning" 대신 "warming") 에서 받는 타입 체커 에러가 진짜 버그 방지 승리. 상수의 Final 이 리팩터 실수 시끄럽게.