deref

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로