13.3 Borrowing
대부분의 경우에 우리는 어떤 것에 대한 소유권을 취하지 않고 데이터에 접근한다. 이를 지원하기 위해 Rust에서는 대여(borrowing) 기법을 사용한다. 객체를 값(T
)으로 전달하는 대신, 객체는 참조(&T
)로 전달될 수 있다.
컴파일러가 정적으로 보장하기에(대여 검사자를 통해) 참조는 항상 유효한 객체 포인트이다. 그래서 객체에 대한 참조가 존재하는 동안에는, 객체는 소멸될 수 없다.
// 이 함수는 박스의 소유권을 취하고 소멸시킨다 fn eat_box_i32(boxed_i32: Box<i32>) { println!("Destroying box that contains {}", boxed_i32); } // i32를 대여하는 함수 fn borrow_i32(borrowed_i32: &i32) { println!("This int is: {}", borrowed_i32); } fn main() { // 박스에 i32, 그리고 스택에 i32를 생성 let boxed_i32 = Box::new(5_i32); let stacked_i32 = 6_i32; // 박스의 내용물을 빌린다. 소유권을 취하진 않고, // 그래서 내용물은 다시 대여될 수 있다. borrow_i32(&boxed_i32); borrow_i32(&stacked_i32); { // 박스 내부에 보관된 데이터의 참조를 취한다 let _ref_to_i32: &i32 = &boxed_i32; // 에러! // `boxed_i32`는 내부 값을 대여하고 있는 동안에는 소멸 될 수 없다. // FIXME ^ 해당 라인을 주석 처리하세요. // `_ref_to_i32`가 범위에서 벗어나고 더 이상 대여상태가 아니다. } // `boxed_i32`는 이제 `eat_box`에게 소유권을 넘길 수 있고 소멸되게 된다. eat_box_i32(boxed_i32); }