Rust · Deref

스마트 포인터가 함수 인자에 맞춰지는 길

hello(&m)은 하나의 호출처럼 보이지만, 컴파일러는 Deref::deref를 따라 필요한 참조 타입까지 이동합니다.

호출자가 넘김

1

&MyBox<String>

m은 커스텀 스마트 포인터이고, 함수 시그니처와 아직 맞지 않습니다.

MyBox deref

2

&String

MyBox<T>deref가 내부 값의 참조를 반환합니다.

String deref

3

&str

표준 라이브러리의 String 구현이 문자열 슬라이스 참조로 이어 줍니다.

함수 호출 성립

4

fn hello(name: &str)

필요한 타입을 찾으면 변환 탐색이 멈추고, 호출은 그대로 읽기 쉬운 형태로 남습니다.

컴파일러가 보는 규칙

source

인자로 들어온 참조 타입을 확인합니다.

deref

Deref 구현이 있으면 한 단계 더 안쪽 참조를 얻습니다.

target

매개변수 타입과 일치하면 그 참조로 함수를 호출합니다.

핵심 효과

사용자는 &(*m)[..]처럼 기호가 많은 코드를 직접 쓰지 않아도 됩니다. 변환 횟수는 컴파일 타임에 정해지므로 런타임 비용도 추가되지 않습니다.