본문 바로가기
08.개발&프로그래밍/4.Rust(러스트)

6장: 함수와 모듈로 코드 구조화하기

by JWJ Family 2025. 7. 28.
728x90

Rust 프로젝트를 크고 단단하게 만드는 네 알파벳—fn, mod, pub, use—만 익히면 Rust 함수·Rust 선언·함수 호출 로직을 레고 블록처럼 조립할 수 있습니다. 이번 장에서는 함수 정의부터 모듈 나누기, 공개 범위 설정, 경로 단축까지 단계별로 배워, 나만의 라이브러리를 만들 준비를 마칩니다. 


6-1. fn: Rust 함수 정의와 호출

Rust 함수fn 키워드, 이름, 매개변수, 반환형(선택)으로 이루어집니다. 마지막 표현식을 세미콜론 없이 두면 반환값이 됩니다. 메서드는 구조체 내부에 정의된 fn으로, 첫 인자로 self를 받습니다.  Rust 선언 시 타입을 명시해 컴파일 단계에서 오류를 차단하므로 함수 호출 안전성이 극대화됩니다.

// Rust 선언 & 함수 호출 예시
fn add(a: i32, b: i32) -> i32 { a + b }   // Rust 함수
println!("3 + 4 = {}", add(3, 4));        // 함수 호출

6-2. mod: 모듈로 코드 구획 나누기

mod는 관련 항목을 모아 이름 공간을 형성합니다. 크레이트 루트(main.rs 또는 lib.rs)에서 mod garden;처럼 선언하면 컴파일러는 src/garden.rssrc/garden/mod.rs 파일을 찾아 연결합니다. 모듈은 계층적 트리가 되어 대규모 프로젝트를 깔끔하게 분리합니다. 파일 분리는 빌드 시간에 자동 결합되므로 러스트 특유의 높은 컴파일러 신뢰성을 유지합니다.

6-3. pub: 공개 범위와 캡슐화

항목을 외부 모듈에 노출하려면 pub 키워드를 붙입니다. 기본값은 비공개(private)라서 API 표면을 최소화해 유지보수를 돕습니다. 세밀한 가시성 제어를 위해 pub(crate), pub(super), pub(in path) 같은 스코프 한정도 지원합니다. 공개 규칙을 통해 라이브러리 작성 시 의도치 않은 의존성 노출을 방지할 수 있습니다. 

6-4. use: 경로 단축과 별칭

긴 경로를 매번 적기 번거롭다면 use로 스코프에 가져와 짧게 참조합니다. 한 번만 선언하면 같은 범위에서 반복 사용 가능합니다.  별칭(as)을 주어 이름 충돌을 피할 수도 있고, 중괄호 중첩으로 다중 항목을 동시에 불러올 수도 있습니다. 


6-5. 실습: “math” 모듈 분리 & 공개 함수 작성

  1. 프로젝트 생성: cargo new modular_demo
  2. 폴더 만들기: mkdir src/math
  3. src/math/mod.rs
    pub mod ops;  // 하위 모듈 연결 (Rust 선언)
  4. src/math/ops.rs
    pub fn multiply(a: i32, b: i32) -> i32 { a * b }  // Rust 함수
  5. src/main.rs
    mod math;                      // 모듈 선언
    use crate::math::ops::multiply; // 경로 단축
    
    fn main() {
        println!("3 × 4 = {}", multiply(3, 4)); // 함수 호출
    }

실행 결과

$ cargo run
3 × 4 = 12

mod로 구조를 선언하고, pub으로 함수 가시성을 열어 두었으며, use로 경로를 간소화해 코드 가독성을 확보했습니다. Rust 함수·Rust 선언·함수 호출 과정이 명확하게 드러납니다.


6-6. 오늘 배운 핵심 요약

  • fn으로 Rust 함수를 정의하고 표현식 반환으로 깔끔한 로직 작성 
  • mod로 파일·폴더를 모듈 트리로 구성해 대규모 코드베이스 관리 
  • pub 가시성 제어로 API 표면 최소화·캡슐화 유지 
  • use로 경로를 한 번 단축해 함수 호출을 간결하게 작성 

다음 7장에서는 에러 처리를 담당하는 Result·Option? 연산자로 안전한 예외 흐름을 설계하는 방법을 배웁니다.

반응형