comnic's Dev&Life

[Rust] 5. 함수, 모듈, 패키지 본문

Rust

[Rust] 5. 함수, 모듈, 패키지

comnic 2023. 12. 3. 12:36
반응형

5. 함수, 모듈,  패키지

 

5.1 함수(Functions)의 정의와 호출

함수는 Rust 프로그램을 구성하는 기본적인 블록으로, 특정 작업을 수행하는 코드의 묶음입니다. Rust에서 함수는 fn 키워드를 사용하여 정의됩니다.

함수를 정의하고 호출하는 방법은 다음과 같습니다:

// 함수 정의
fn greet(name: &str) {
    println!("안녕하세요, {}!", name);
}

// 함수 호출
greet("Alice");

위의 예제에서 greet 함수는 문자열을 인자로 받아 환영 메시지를 출력하는 역할을 합니다. Rust에서 함수는 fn 키워드로 정의되며, 파라미터와 반환값의 타입은 명시적으로 지정될 수 있습니다.

 

5.2 매개변수와 반환값

함수는 입력 값을 받는 매개변수(parameter)와 결과 값을 반환할 수 있습니다. 매개변수와 반환 값은 함수의 시그니처에 명시됩니다.

함수는 -> 연산자를 사용하여 반환값의 타입을 지정할 수 있습니다. 아무 값도 반환하지 않는 함수의 경우 ()를 반환 타입으로 지정합니다.

// 반환값이 없는 함수
fn print_hello() {
    println!("안녕하세요!");
}

// 두 개의 매개변수와 반환 값이 있는 함수
fn add(a: i32, b: i32) -> i32 {
    a + b
}

// 함수 호출
let result = add(3, 4);
println!("덧셈 결과: {}", result);

위의 예제에서 add 함수는 두 개의 정수를 받아 더한 결과를 반환합니다.

 

5.3 모듈(Modules)과 패키지(Package)

5.3.1 모듈

Rust에서 모듈은 코드를 논리적으로 구조화하는 방법을 제공합니다. 모듈은 mod 키워드를 사용하여 정의되며, 함수와 변수를 묶어서 관리할 수 있습니다. 모듈을 사용하여 코드를 파일이나 디렉토리 단위로 나눌 수 있습니다.

다음은 모듈을 사용하는 간단한 예제입니다:

// 모듈 정의
mod greetings {
    // 모듈 내 함수 정의
    pub fn say_hello() {
        println!("안녕하세요!");
    }
}

// 모듈 사용
fn main() {
    greetings::say_hello();
}
  • mod greetings: greetings 모듈을 정의합니다.
  • pub fn say_hello(): say_hello 함수를 greetings 모듈에 정의하며, pub 키워드를 사용하여 외부에서 접근 가능하도록 설정합니다.
  • greetings::say_hello(): say_hello 함수를 호출하는 예제입니다.

모듈을 사용하여 코드를 구성함으로써 프로그램의 구조를 명확하게 만들 수 있습니다.
모듈 내의 함수에 접근하기 위해서는 모듈명::함수명 형식을 사용합니다.
pub 키워드를 사용하여 모듈 내에서 외부에서 접근 가능한 함수를 지정할 수 있습니다.

5.3.2 패키지

패키지는 Rust의 프로젝트 단위를 나타내며, 패키지 안에는 하나 이상의 크레이트(Crate, 소스 코드 라이브러리 또는 실행 가능한 프로그램)가 포함됩니다. 패키지는 Cargo.toml 파일에 메타데이터를 정의하여 관리됩니다.

# Cargo.toml 파일

[package]
name = "my_project"
version = "0.1.0"
authors = ["Your Name <your.email@example.com>"]
edition = "2021"

# 패키지 의존성 등을 정의할 수 있음
[dependencies]
  • name: 패키지의 이름을 정의합니다.
  • version: 패키지의 버전을 정의합니다.
  • authors: 프로젝트의 저자 정보를 정의합니다.
  • edition: Rust 에디션을 지정합니다.
  • [dependencies]: 패키지가 의존하는 다른 크레이트를 정의할 수 있는 섹션입니다.

패키지를 초기화하고 관리하는 도구는 Cargo이며, 패키지와 크레이트를 관리하는 데 사용됩니다.

 

5.3.3 패키지의 초기화와 빌드

새로운 Rust 패키지를 초기화하고 빌드하기 위해서는 cargo 명령어를 사용합니다.

# 새로운 패키지 초기화
cargo new my_project

# 패키지 디렉토리로 이동
cd my_project

# 패키지 빌드
cargo build

# 빌드된 바이너리 실행
./target/debug/my_project
  • cargo new my_project: 새로운 패키지를 초기화합니다.
  • cd my_project: 생성된 패키지 디렉토리로 이동합니다.
  • cargo build: 패키지를 빌드합니다.
  • ./target/debug/my_project: 빌드된 바이너리를 실행합니다.

이렇게 초기화된 패키지는 해당 프로젝트의 구조를 갖추고, 필요한 경우 의존성을 추가하여 외부 크레이트를 사용할 수 있습니다. Rust는 Cargo를 통해 의존성을 관리하며, 이를 통해 패키지의 빌드 및 의존성 해결이 간편하게 이루어집니다.

이러한 함수, 모듈, 패키지는 Rust 코드를 조직화하고 유지보수 가능하게 만드는 데 중요한 역할을 합니다.

 

5.4 예제와 설명

다음은 함수와 모듈을 함께 사용하는 예제 코드입니다. 이 예제에서는 간단한 수학 연산 함수를 모듈로 정의하고, 이 모듈을 사용하여 메인 함수에서 계산을 수행합니다.

// math 모듈 정의
mod math {
    // 덧셈 함수
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }

    // 뺄셈 함수
    pub fn subtract(a: i32, b: i32) -> i32 {
        a - b
    }
}

// 메인 함수
fn main() {
    // math 모듈의 함수 호출
    let result_add = math::add(5, 3);
    let result_subtract = math::subtract(10, 4);

    // 결과 출력
    println!("덧셈 결과: {}", result_add);
    println!("뺄셈 결과: {}", result_subtract);
}

이 예제에서 math 모듈은 add와 subtract 두 개의 함수를 제공하고 있습니다. 메인 함수에서는 이 모듈을 사용하여 각각 덧셈과 뺄셈을 수행하고 결과를 출력합니다.

함수와 모듈은 Rust의 코드 구성을 더욱 체계적이고 유지보수 가능하게 만드는데 중요한 역할을 합니다. 함수는 코드를 재사용하고 추상화하는 도구로서, 모듈은 코드를 논리적으로 그룹화하여 코드의 일부를 캡슐화하는 데 사용됩니다.

반응형
Comments