9.2 Struct visibility

구조체는 그들 필드에 추가 가시성을 갖는다. 가시성은 기본적으로 private이고, pub 수정자로 재정의 될 수 있다. 이 가시성은 오직 정의된 외부 모듈에서 접근될 때만 의미가 있고, 정보를 숨기는 것이 목적이다(캡슐화). Structs have an extra level of visibility with their fields. The visibility defaults to private, and can be overridden with the pub modifier. This visibility only matters when a struct is accessed from outside the module where it is defined, and has the goal of hiding information (encapsulation).

mod my {
    // 제네릭 타입 `T`의 public 필드를 갖는 public 구조체
    pub struct WhiteBox<T> {
        pub contents: T,
    }

    // 제네릭 타입 `T`의 private 필드를 갖는 public 구조체
    #[allow(dead_code)]
    pub struct BlackBox<T> {
        contents: T,
    }

    impl<T> BlackBox<T> {
        // A public constructor method
        pub fn new(contents: T) -> BlackBox<T> {
            BlackBox {
                contents: contents,
            }
        }
    }
}

fn main() {
    // public 필드가 있는 public 구조체는 일반적으로 생성 가능.
    let white_box = my::WhiteBox { contents: "public information" };

    // 그리고 그들의 필드는 일반적인 방법으로 접근 가능.
    println!("The white box contains: {}", white_box.contents);

    // private 필드를 가진 public 구조체는 필드 이름을 사용해서 생성 불가능.
    // 에러! `BlackBox`는 private 필드이다.
    //let black_box = my::BlackBox { contents: "classified information" };
    // TODO ^ 해당 라인의 주석을 제거해보세요.

    // 하지만, private 필드를 가진 구조체는 public 생성자로 생성 가능.
    let _black_box = my::BlackBox::new("classified information");

    // 그리고 public 구조체의 private 필드는 접근 불가능.
    // 에러! `contents` 필드는 private.
    //println!("The black box contains: {}", _black_box.contents);
    // TODO ^ 해당 라인의 주석을 제거해보세요. 
}

See also:

generics and methods

results matching ""

    No results matching ""