pointers/ref

포인터와 참조 개념을 알아보자.

일단 매치에서 쓰이는 포인터와 참조 개념에 대해서 알아보자.

  • 참조된 값을 reference, & 로 표현하며 반대로 참조된 값을 참조에서 벗길때는 *을 사용하며 Derefencing 이라고 한다.

  • 매치에서 Destructuring 할 떄에는 &, ref 와 ref mut 을 사용한다.

추후 다른 단원에서 이러한 개념에 대해 깊게 다루니 그때 이해하면 되니까 너무 이해하려고 하지말자.

단박에 이해가 되면 좋지만 그렇지 못함으로 반복과 집중을 통해 이해를 높이자.


fn main() {
    let ref_val = &3;

    // 여기서 ref_val 는 &3 이다.
    match ref_val {
        &v => println!("& 를 이용한 match"),
    }

    // &3 -> 3 으로 매치  
    match *ref_val {
        v => println!("value 를 dereferencing 함.")
    }

    
    let not_ref_val = 3;
    
    // 선언 시 변수 앞에 ref 를 추가하여 &변수로 구현할 수 있다.
    let ref change_ref_val = not_ref_val;

    let value = 3;
    let mut mut_value = 3;
    

    match value {
        // value -> &val 로 출력할 수 있다. 
        ref r => println!("Create a ref val : {}", r),
    }

    //mutable 한 value를 ref mut 로 구현 후 dereferencing 하여 변환
    match mut_value {
         ref mut m => {
            *m += 10;
            println!("ref mut val : {}", m)
        }
    }

}