Deref Trait
역참조 연산자의 동작을 정의하는 Trait
역참조 연산자
- 참조자가 가리키고 있는 값을 얻기 위해선
역참조를 수행해야한다. assert_eq!(5, y);와 같이 작성을 하면 컴파일에 실패한다.
fn main() {
let x = 5;
let y = &x;
assert_eq!(5, x);
assert_eq!(5, *y);
}
암묵적 역참조 강제 변환
- Deref를 구현한 타입의 참조자를 다른 타입의 참조자 변환해 준다.
- &Box
-> &String -> &str
fn main() {
let m = Box::new(String::from("Rust"));
hello(&m);
}
fn hello(name: &str) {
println!("Hello, {name}!");
}
가변 참조자의 역참조
-
Deref는 불변 참조자에 대한 *를 오버라이딩
-
DerefMut는 가변 참조자에 대한 *를 오버라이딩
-
T: Deref<Target=U>일 때&T에서&U로 -
T: DerefMut<Target=U>일때&mut T에서&mut U로 -
T: Deref<Target=U>일 때&mut T에서&U로