PhantomData

PhantomData (소유 흉내 마커 타입)

T를 "소유하는 것처럼" 행동하는 것들을 표시하는 zero-sized 타입이에요. 컴파일러에게 어떤 안전 속성을 계산할 때 쓰여요.

출처: Rust 공식 문서

본문

타입에 PhantomData 필드를 추가하면, 실제로 저장하지 않더라도 타입이 T 값을 저장하는 것처럼 행동한다는 것을 컴파일러에게 알려줘요. 이 정보는 특정 안전 속성을 계산할 때 사용돼요.

PhantomData를 어떻게 사용하는지에 대한 심층 설명은 The Nomicon을 참고하세요.

무시무시한 주의점 👻👻👻

둘 다 무서운 이름을 가졌지만, PhantomData와 'phantom type(가상 타입)'은 관련은 있되 동일하지는 않아요. 가상 타입 파라미터는 단순히 절대 사용되지 않는 타입 파라미터예요. Rust에서는 이 경우 컴파일러가 불평하는 경우가 많고, 해결책은 PhantomData를 통해 "더미" 사용을 추가하는 것이에요.

예시: 사용되지 않는 라이프타임 파라미터

PhantomData의 가장 흔한 사용처는 보통 unsafe 코드의 일부로, 사용되지 않는 라이프타임 파라미터를 가진 구조체예요. 예를 들어 *const T 타입의 두 포인터를 가진 Slice 구조체가 있어요:

struct Slice<'a, T> {
    start: *const T,
    end: *const T,
}

더 알아보기 (Learn more)

Rust 공식 문서