Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

구조체 가시성

구조체는 필드에 대해 추가적인 수준의 가시성을 가집니다. 가시성은 기본적으로 비공개이며, 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: "classified information" };
// TODO ^ 이 줄의 주석을 해제해 보세요

    // 하지만 비공개 필드를 가진 구조체는 공개 생성자를 통해 생성할 수 있습니다
    let _closed_box = my::ClosedBox::new("기밀 정보");

    // 그리고 공개 구조체의 비공개 필드에는 접근할 수 없습니다.
// 에러! `contents` 필드는 비공개입니다
// println!("닫힌 박스 내용물: {}", _closed_box.contents);
// TODO ^ 이 줄의 주석을 해제해 보세요
}

참고:

제네릭메서드