Rust 구조체에서의 라이프타임 관리

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 구조체에서 라이프타임을 사용하는 것을 보여주는 Rust 코드를 다룹니다. 이 코드에는 i32에 대한 참조를 보유하는 Borrowed라는 구조체가 포함되어 있으며, 이 참조는 구조체 자체보다 오래 지속되어야 합니다. 또한 NamedBorrowed라는 구조체도 있는데, 이 구조체는 i32에 대한 두 개의 참조를 가지며, 두 참조 모두 구조체보다 오래 지속되어야 합니다. 또한, Either라는 열거형이 있는데, 이 열거형은 i32이거나 이에 대한 참조일 수 있으며, 참조는 열거형보다 오래 지속되어야 합니다. 마지막으로, 이 코드는 이러한 구조체와 열거형의 인스턴스를 생성하고 내용을 출력하여 Rust 에서 라이프타임의 사용법을 보여줍니다.

참고: 랩에서 파일 이름을 지정하지 않은 경우, 원하는 파일 이름을 사용할 수 있습니다. 예를 들어, main.rs를 사용하고 rustc main.rs && ./main으로 컴파일하고 실행할 수 있습니다.

구조체 (Structs)

구조체에서 라이프타임 (Lifetimes) 의 주석 (Annotation) 도 함수와 유사합니다.

// `i32` 에 대한 참조를 담는 `Borrowed` 타입.
// `i32` 에 대한 참조는 `Borrowed` 보다 오래 지속되어야 합니다.
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);

// 마찬가지로, 여기 있는 두 참조 모두 이 구조체보다 오래 지속되어야 합니다.
#[derive(Debug)]
struct NamedBorrowed<'a> {
    x: &'a i32,
    y: &'a i32,
}

// `i32` 이거나 이에 대한 참조인 열거형 (enum).
#[derive(Debug)]
enum Either<'a> {
    Num(i32),
    Ref(&'a i32),
}

fn main() {
    let x = 18;
    let y = 15;

    let single = Borrowed(&x);
    let double = NamedBorrowed { x: &x, y: &y };
    let reference = Either::Ref(&x);
    let number    = Either::Num(y);

    println!("x is borrowed in {:?}", single);
    println!("x and y are borrowed in {:?}", double);
    println!("x is borrowed in {:?}", reference);
    println!("y is *not* borrowed in {:?}", number);
}

요약

축하합니다! 구조체 (Structs) 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.