공유와 고유 빌림
러스트에서는 값을 빌릴 때 다음과 같은 제약조건이 있습니다:
- 한번에 하나 이상의
&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}"); }
- 위 코드 컴파일 되지 않습니다. 왜냐하면
c
는a
를 가변 변수로 빌렸고, 이와 동시에b
는a
를 불변 변수로 빌렸기 때문입니다. b
에 대한println!
구분을c
가 있는 스코프 앞으로 이동하면 컴파일이 됩니다.- 이렇게 바꾸면, 컴파일러는
c
가a
를 가변 변수로 빌리기 전에만b
가 사용된다는 것을 확인할 수 있습니다. 빌림 검사기의 이러한 기능을 “non-lexical lifetime” 이라고 합니다.