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);
}

results matching ""

    No results matching ""