Rust 구조체 필드 가시성

Beginner

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

소개

이 실습에서는 Rust 에서 구조체의 가시성과 이것이 필드의 접근성에 미치는 영향에 대해 배웁니다.

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

구조체 가시성

구조체는 필드와 함께 추가적인 가시성 수준을 갖습니다. 기본적으로 필드의 가시성은 비공개 (private) 이며, pub 수정자를 사용하여 재정의할 수 있습니다. 이 가시성은 구조체가 정의된 모듈 외부에서 접근될 때만 중요하며, 정보를 숨기는 목적 (캡슐화) 을 가지고 있습니다.

mod my {
    // 제네릭 타입 `T` 의 공개 필드를 가진 공개 구조체
    pub struct OpenBox<T> {
        pub contents: T,
    }

    // 제네릭 타입 `T` 의 비공개 필드를 가진 공개 구조체
    pub struct ClosedBox<T> {
        contents: T,
    }

    impl<T> ClosedBox<T> {
        // 공개 생성자 메서드
        pub fn new(contents: T) -> ClosedBox<T> {
            ClosedBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // 공개 필드를 가진 공개 구조체는 일반적으로 생성할 수 있습니다.
    let open_box = my::OpenBox { contents: "공개 정보" };

    // 그리고 그 필드는 일반적으로 접근할 수 있습니다.
    println!("열린 상자에는 다음이 들어 있습니다: {}", open_box.contents);

    // 비공개 필드를 가진 공개 구조체는 필드 이름을 사용하여 생성할 수 없습니다.
    // 오류! `ClosedBox` 에는 비공개 필드가 있습니다.
    //let closed_box = my::ClosedBox { contents: "기밀 정보" };
    // TODO ^ 이 줄을 주석 해제해 보세요

    // 그러나 비공개 필드를 가진 구조체는
    // 공개 생성자를 사용하여 만들 수 있습니다.
    let _closed_box = my::ClosedBox::new("기밀 정보");

    // 그리고 공개 구조체의 비공개 필드에 접근할 수 없습니다.
    // 오류! `contents` 필드는 비공개입니다.
    //println!("닫힌 상자에는 다음이 들어 있습니다: {}", _closed_box.contents);
    // TODO ^ 이 줄을 주석 해제해 보세요
}

요약

축하합니다! 구조체 가시성 실습을 완료했습니다. LabEx 에서 더 많은 실습을 통해 기술을 향상시킬 수 있습니다.