공유와 고유 빌림

러스트에서는 값을 빌릴 때 다음과 같은 제약조건이 있습니다:

  • 한번에 하나 이상의 &T 값을 가지거나, 또는
  • 정확히 하나의 &mut T 값만을 가질 수 있습니다.
fn main() {
    let mut a: i32 = 10;
    let b: &i32 = &a;

    {
        let c: &mut i32 = &mut a;
        *c = 20;
    }

    println!("a: {a}");
    println!("b: {b}");
}
  • 위 코드 컴파일 되지 않습니다. 왜냐하면 ca를 가변 변수로 빌렸고, 이와 동시에 ba를 불변 변수로 빌렸기 때문입니다.
  • b에 대한 println! 구분을 c가 있는 스코프 앞으로 이동하면 컴파일이 됩니다.
  • 이렇게 바꾸면, 컴파일러는 ca를 가변 변수로 빌리기 전에만 b가 사용된다는 것을 확인할 수 있습니다. 빌림 검사기의 이러한 기능을 “non-lexical lifetime” 이라고 합니다.