Programming

Rust기초 알기 - 3.4 모듈과 패키지

IT오이시이 2023. 6. 19. 23:22
728x90

 

Rust기초알기(3) - 기본 문법
3.1 변수와 데이터 타입
3.2 제어문 (조건문, 반복문)
3.3 함수 정의와 호출
3.4 모듈과 패키지
3.5 주석

[목차] Rust Programming - Rust 기초 알기 목차.Zip

#Rust프로그래밍  #Rust언어기초 #Rust기초문법 #Rust기초알기

 

 

Rust기초 알기 - 3.4 모듈과 패키지

 
Rust에서는 패키지, 크레이트, 모듈이라는 세 가지 중요한 개념이 있습니다. 이들은 코드 조직화, 재사용성 및 의존성 관리를 위해 사용됩니다.
 

Rust의 이들 개념은 다른 언어와 마찬가지로  코드 조직화 및 구조화 기능을 최대한 활용하여 프로젝트 관리와 프로그램의 유지보수 효율성을 높이는 방법 입니다.

■ 패키지 (Package):

  • 패키지는 독립적으로 빌드, 테스트, 배포되는 단위입니다.
  • 패키지는 코드를 배포하고 공유하기 위한 최상위 단위입니다.
  • Rust 프로젝트는 하나 이상의 패키지로 구성될 수 있습니다.
  • 패키지는 Cargo를 사용하여 관리되며, Cargo.toml 파일과 소스 코드 디렉토리로 구성됩니다.
  • Cargo.toml 파일은 패키지의 메타데이터와 의존성 정보를 포함합니다.


■크레이트 (Crate):

  • 크레이트는 패키지 내에서 단일 컴파일 단위를 의미합니다.
  • 일반적으로, 패키지 내에는 단일 크레이트가 있지만, 여러 개의 크레이트를 가지는 복합 패키지도 가능합니다.
  • 크레이트는 Rust 컴파일러에 의해 빌드되고 실행 가능한 파일, 라이브러리, 테스트 등의 형태로 사용됩니다.
  • 크레이트는 src 디렉토리에 소스 코드를 포함하며, 이 코드는 모듈로 구성됩니다.
  • 크레이트 내에는 main.rs (실행 가능한 크레이트의 진입점) 또는 lib.rs (라이브러리 크레이트의 진입점)와 같은 엔트리 포인트가 있습니다.
  • 크레이트는 패키지의 기본 구성 요소이며, 크레이트 간의 의존성을 관리하기 위해 Cargo.toml 파일에서 선언됩니다. 

 
일반적으로 crate는 두가지 유형이 있습니다.

실행 가능한 크레이트 (Executable Crate):
실행 가능한 크레이트는 실행할 수 있는 프로그램을 생성합니다. 주로 main.rs 파일을 엔트리 포인트로 사용합니다. main() 함수를 포함하여 프로그램의 진입점을 정의합니다. 실행 가능한 크레이트를 빌드하면 실행 가능한 바이너리 파일이 생성됩니다.

라이브러리 크레이트 (Library Crate):
라이브러리 크레이트는 재사용 가능한 코드를 포함하는 라이브러리를 생성합니다. 주로 lib.rs 파일을 엔트리 포인트로 사용합니다. 다른 크레이트에서 이 라이브러리를 의존성으로 추가하여 사용할 수 있습니다. 라이브러리 크레이트를 빌드하면 라이브러리 파일이 생성됩니다.

 

■모듈 (Module):

  • 모듈은 코드를 논리적으로 그룹화하고 조직화하기 위한 메커니즘입니다.
  • 모듈은 코드의 일부를 캡슐화하여 코드 범위를 관리하고 이름 충돌을 방지합니다.
  • 모듈은 크레이트 내에서 계층적 구조로 구성될 수 있으며, mod 키워드를 사용하여 선언됩니다.
  • 모듈은 소스 파일 내에서 선언될 수도 있고, 별도의 파일로 분리되어 다른 파일에서 임포트될 수도 있습니다.
  • 모듈은 코드 재사용과 추상화를 위한 강력한 도구로 사용됩니다.

다음은 my_module이라는 이름의 모듈을 정의하는 Rust 코드 규격입니다.

mod my_module {
    // 모듈 내용
}

 
 

1. 패키지 (Package): 

Rust 프로젝트의 패키지는 Cargo를 사용하여 관리됩니다. Cargo.toml 파일과 소스 코드 디렉토리로 구성됩니다. 예를 들어, 다음은 간단한 패키지의 Cargo.toml 파일입니다:
※ 패키지의 구성 요소 : Cargo.toml 파일과 소스 코드 디렉토리

  • Cargo.toml 파일은 패키지의 메타데이터와 의존성 정보를 포함하고 있으며
  • 소스 코드 디렉토리에는 패키지의 모듈과 구현이 포함됩니다.
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"

[dependencies]
rand = "0.8.4"

 
 

2. 크레이트 (Crate):

Rust에서 크레이트는 단일 컴파일 단위로 사용됩니다. src 디렉토리 내에 소스 코드를 포함하며, main.rs나 lib.rs와 같은 엔트리 포인트를 가지게 됩니다. 예를 들어, 다음은 src/main.rs 파일의 내용으로 실행 가능한 크레이트의 예시입니다:

fn main() {
    println!("Hello, world!");
}

 

3. 모듈 (Module):

모듈은 코드를 논리적으로 그룹화하고 조직화하기 위한 메커니즘입니다. 예를 들어, 다음은 모듈을 사용하여 코드를 구성한 예시입니다.
다음  예시에서 my_module은 모듈을 선언하는 데 사용되었고, sub_module은 my_module의 하위 모듈입니다. sub_module의 hello() 함수를 호출하여 실행 결과로 "Hello from sub module!"이 출력됩니다.

// mod.rs 파일
mod my_module {
    pub mod sub_module {
        pub fn hello() {
            println!("Hello from sub module!");
        }
    }
}

// main.rs 파일
mod my_module; // 모듈을 임포트

fn main() {
    my_module::sub_module::hello();
}

 

728x90
반응형