13.4 Lifetimes

생명주기는 컴파일러에 의해 생성되어(또한 대여 검사자로 불리는) 모든 대여가 유효한지 확인하고자 사용한다. 특별히, 변수의 생명주기는 그가 생성될 때 시작하고 소멸할 때 끝난다. 생명주기와 범위가 자주 함께 인용되는데, 이들은 같지 않다.

취하기를 예로, 우리가 변수를 &로 대여하는 상황이다. 대여는 그게 선언되는 곳에 의해 생명주기가 결정된다. 그 결과 대여는 그 대여자가 소멸하기 전 그 끝까지만 유효하다(생명주기). 하지만, 대여의 범위는 참조가 사용되는 곳에 의해 결정된다(범위).

이 섹션의 나머지와 다음의 예제에서, 우리는 생명주기가 범위와 어떻게 연관있고 어떻게 다른지 살펴보게 될 것이다.

// 생명주기는 줄로 표시하여 각 변수들의 생성과 소멸을 주해했다.
// `i`는 `borrow1`과 `borrow2`를 모두 포괄하는 범위로 가장 긴 생명주기를 갖는다.
// `borrow1`와 `borrow2`의 생명주기의 비교는 서로 분리되어 있기 때문에 부적절하다.
fn main() {
    let i = 3; // Lifetime for `i` starts. ────────────────┐
    //                                                     │
    { //                                                   │
        let borrow1 = &i; // `borrow1` lifetime starts. ──┐│
        //                                                ││
        println!("borrow1: {}", borrow1); //              ││
    } // `borrow1 ends. ──────────────────────────────────┘│
    //                                                     │
    //                                                     │
    { //                                                   │
        let borrow2 = &i; // `borrow2` lifetime starts. ──┐│
        //                                                ││
        println!("borrow2: {}", borrow2); //              ││
    } // `borrow2` ends. ─────────────────────────────────┘│
    //                                                     │
}   // Lifetime ends. ─────────────────────────────────────┘

주목할 점은 생명주기 꼬리표에는 이름이나 타입이 부여되지 않는다. 이 제약은 앞으로 우리가 살펴보게 되는 것처럼 생명주기가 사용될 수 있게 한다.

results matching ""

    No results matching ""