데브허브 | DEVHUB | Understanding PhantomData in Rust | Zero Sized Type | Marker Type | Type SafetyUnderstanding PhantomData in Rust | Zero Sized Type | Marker Type | Type Safety
- Rust에서 제네릭 구조체(struct)를 선언할 때, 타입 매개변수(T)가 필드에 사용되지 않으면 컴파일 오류가 발생합니다. 🚫
- 이는 Rust 컴파일러가 T의 스레드 안전성, 트레잇 감지, 메모리 해제 로직 등을 파악해야 하기 때문입니다. 🧠
PhantomData는 메모리 공간을 전혀 차지하지 않는(Zero-Sized Type) 특별한 타입입니다. 👻
PhantomData는 컴파일러에게 해당 구조체가 마치 T 타입의 값을 포함하는 것처럼 작동하도록 지시하는 마커 역할을 합니다. 🏷️
- 이를 통해 실제 데이터를 저장하지 않으면서도 컴파일 타임에 타입 안전성을 확보하고, 미터와 피트처럼 단위 구분을 강제하는 등의 로직을 구현할 수 있습니다. 🛡️
- 결과적으로 런타임에는
PhantomData가 없는 것과 동일한 메모리 크기를 가지며, 추가 비용 없이 엄격한 타입 검사를 제공합니다. 🚀