범위 및 프라이버시 제어를 위한 모듈 정의

Beginner

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

소개

범위 및 프라이버시 제어를 위한 모듈 정의에 오신 것을 환영합니다. 이 랩은 Rust Book의 일부입니다. LabEx 에서 Rust 기술을 연습할 수 있습니다.

이 랩에서는 모듈에 대해 배우고, 모듈이 크레이트 내에서 코드를 구성하고, 항목의 프라이버시를 제어하며, 모듈 트리를 탐색하는 방법을 제공하는 방법을 배웁니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 94%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

범위 및 프라이버시 제어를 위한 모듈 정의

이 섹션에서는 모듈과 모듈 시스템의 다른 부분, 즉 항목의 이름을 지정할 수 있는 경로 (paths), 경로를 범위 내로 가져오는 use 키워드, 항목을 공개하는 pub 키워드에 대해 이야기하겠습니다. 또한 as 키워드, 외부 패키지 및 glob 연산자에 대해서도 논의할 것입니다.

모듈 (Modules) 을 사용하면 가독성과 재사용성을 위해 크레이트 내에서 코드를 구성할 수 있습니다. 모듈은 또한 항목의 프라이버시 (privacy) 를 제어할 수 있게 해줍니다. 모듈 내의 코드는 기본적으로 비공개이기 때문입니다. 비공개 항목은 외부에서 사용할 수 없는 내부 구현 세부 정보입니다. 모듈과 그 안의 항목을 공개하여 외부 코드가 사용하고 의존할 수 있도록 할 수 있습니다.

예를 들어, 레스토랑의 기능을 제공하는 라이브러리 크레이트를 작성해 보겠습니다. 함수의 시그니처를 정의하지만 레스토랑 구현보다는 코드 구성에 집중하기 위해 본문은 비워두겠습니다.

레스토랑 업계에서 레스토랑의 일부는 프론트 오브 하우스 (front of house) 로, 다른 부분은 백 오브 하우스 (back of house) 로 불립니다. 프론트 오브 하우스는 고객이 있는 곳입니다. 여기에는 호스트가 고객을 안내하고, 서버가 주문과 결제를 받고, 바텐더가 음료를 만드는 곳이 포함됩니다. 백 오브 하우스는 주방에서 셰프와 요리사가 일하고, 식기 세척기가 청소하고, 관리자가 행정 업무를 하는 곳입니다.

이러한 방식으로 크레이트를 구성하기 위해 해당 함수를 중첩된 모듈로 구성할 수 있습니다. cargo new restaurant --lib를 실행하여 restaurant라는 새 라이브러리를 만듭니다. 그런 다음 Listing 7-1 의 코드를 src/lib.rs에 입력하여 일부 모듈과 함수 시그니처를 정의합니다. 이 코드는 프론트 오브 하우스 섹션입니다.

파일 이름: src/lib.rs

mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}

        fn seat_at_table() {}
    }

    mod serving {
        fn take_order() {}

        fn serve_order() {}

        fn take_payment() {}
    }
}

Listing 7-1: 함수를 포함하는 다른 모듈을 포함하는 front_of_house 모듈

mod 키워드와 모듈 이름 (이 경우 front_of_house) 을 사용하여 모듈을 정의합니다. 그런 다음 모듈의 본문은 중괄호 안에 들어갑니다. 모듈 내부에 hostingserving 모듈과 같이 다른 모듈을 배치할 수 있습니다. 모듈은 또한 구조체, 열거형, 상수, 트레이트 및 Listing 7-1 과 같은 함수와 같은 다른 항목에 대한 정의를 포함할 수 있습니다.

모듈을 사용하면 관련 정의를 함께 그룹화하고 관련 이유를 지정할 수 있습니다. 이 코드를 사용하는 프로그래머는 모든 정의를 읽을 필요 없이 그룹을 기반으로 코드를 탐색하여 관련 정의를 더 쉽게 찾을 수 있습니다. 이 코드에 새로운 기능을 추가하는 프로그래머는 프로그램을 체계적으로 유지하기 위해 코드를 어디에 배치해야 하는지 알 수 있습니다.

앞서 src/main.rssrc/lib.rs를 크레이트 루트라고 언급했습니다. 그 이름의 이유는 이 두 파일 중 하나의 내용이 크레이트의 모듈 구조의 루트에 있는 crate라는 모듈을 형성하기 때문이며, 이를 모듈 트리 (module tree) 라고 합니다.

Listing 7-2 는 Listing 7-1 의 구조에 대한 모듈 트리를 보여줍니다.

crate
└── front_of_house
├── hosting
│ ├── add_to_waitlist
│ └── seat_at_table
└── serving
├── take_order
├── serve_order
└── take_payment

Listing 7-2: Listing 7-1 의 코드에 대한 모듈 트리

이 트리는 일부 모듈이 다른 모듈 내부에 중첩되는 방식을 보여줍니다. 예를 들어, hostingfront_of_house 내부에 중첩됩니다. 이 트리는 또한 일부 모듈이 형제 (siblings) 임을 보여줍니다. 즉, 동일한 모듈에 정의되어 있습니다. hostingservingfront_of_house 내에 정의된 형제입니다. 모듈 A 가 모듈 B 내에 포함된 경우 모듈 A 는 모듈 B 의 자식 (child) 이고 모듈 B 는 모듈 A 의 부모 (parent) 라고 합니다. 전체 모듈 트리가 crate라는 암시적 모듈 아래에 루트되어 있음을 유의하십시오.

모듈 트리는 컴퓨터의 파일 시스템의 디렉토리 트리를 연상시킬 수 있습니다. 이는 매우 적절한 비교입니다! 파일 시스템의 디렉토리와 마찬가지로 모듈을 사용하여 코드를 구성합니다. 그리고 디렉토리의 파일과 마찬가지로 모듈을 찾을 방법이 필요합니다.

요약

축하합니다! 범위 및 프라이버시 제어를 위한 모듈 정의 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.