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.rs
나 src/garden/mod.rs
파일을 찾아 연결합니다. 모듈은 계층적 트리가 되어 대규모 프로젝트를 깔끔하게 분리합니다. 파일 분리는 빌드 시간에 자동 결합되므로 러스트 특유의 높은 컴파일러 신뢰성을 유지합니다.
6-3. pub: 공개 범위와 캡슐화
항목을 외부 모듈에 노출하려면 pub
키워드를 붙입니다. 기본값은 비공개(private)라서 API 표면을 최소화해 유지보수를 돕습니다. 세밀한 가시성 제어를 위해 pub(crate)
, pub(super)
, pub(in path)
같은 스코프 한정도 지원합니다. 공개 규칙을 통해 라이브러리 작성 시 의도치 않은 의존성 노출을 방지할 수 있습니다.
6-4. use: 경로 단축과 별칭
긴 경로를 매번 적기 번거롭다면 use
로 스코프에 가져와 짧게 참조합니다. 한 번만 선언하면 같은 범위에서 반복 사용 가능합니다. 별칭(as
)을 주어 이름 충돌을 피할 수도 있고, 중괄호 중첩으로 다중 항목을 동시에 불러올 수도 있습니다.
6-5. 실습: “math” 모듈 분리 & 공개 함수 작성
- 프로젝트 생성:
cargo new modular_demo
- 폴더 만들기:
mkdir src/math
- src/math/mod.rs
pub mod ops; // 하위 모듈 연결 (Rust 선언)
- src/math/ops.rs
pub fn multiply(a: i32, b: i32) -> i32 { a * b } // Rust 함수
- 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
과 ?
연산자로 안전한 예외 흐름을 설계하는 방법을 배웁니다.
'08.개발&프로그래밍 > 4.Rust(러스트)' 카테고리의 다른 글
5장: 소유권(Ownership)과 빌림(Borrowing) (0) | 2025.07.28 |
---|---|
4장: 제어 흐름 다지기 (0) | 2025.07.28 |
3장: Rust 기초 문법 이해하기 (0) | 2025.07.28 |
2장: Rust 개발 환경 준비하기 (0) | 2025.07.28 |
1장. Rust 입문: 메모리 안전성과 성능을 한 번에 잡는 첫걸음 (0) | 2025.07.28 |