dict 모양 문제
구조화된 레코드 표현하는 dict — {"name": ..., "age": ..., "tags": [...]}. dict[str, Any] 타입 힌트는 유용한 거 안 알려줘. TypedDict 가 키와 타입 묘사 가능하게 — 체커가 사용 검증.
두 선언 스타일
클래스 스타일 — class User(TypedDict): name: str; age: int. 또는 함수형 — User = TypedDict("User", {"name": str, "age": int}). 클래스 스타일이 더 잘 읽힘, 함수형은 키가 유효 Python 식별자 X 일 때 (하이픈 가진 키 같은) 필요. 둘 다 런타임에 같은 타입 생성.
NotRequired 와 total=False
디폴트로 TypedDict 의 모든 필드 필수. 클래스 선언의 total=False 가 다 옵션. NotRequired[X] (3.11+) 가 특정 필드 옵션 표시 + 나머지 필수 유지. Required[X] 가 반대 — 그렇지 않으면 total=False 인 dict 의 필수 필드.
TypedDict 런타임 — 여전히 dict
TypedDict 가 런타임에 dict. isinstance(user, dict) 가 True. 타입 정보는 순수 정적 체크용. User(name=..., age=...) 를 검증하는 생성자처럼 호출 시도 X — 그냥 dict 만듦.
TypedDict vs dataclass vs Pydantic 선택
TypedDict — JSON 모양 데이터 + 타입 원할 때. Dataclass — 속성 가진 Python 클래스 원할 때 (obj.name, obj["name"] X). Pydantic — 런타임 검증 + 풍부한 필드 의미 필요할 때. Pippa 가 FastAPI 요청/응답 모델에 Pydantic 많이 사용.