Rust의 모노모피제이션 — 제네릭이 어떻게 빠르고 구체적인 코드가 되는가

발행: (2026년 2월 27일 오후 03:41 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

러스트에서 모노모피제이션이란?

모노모피제이션은 러스트가 제네릭 코드를 컴파일 시점에 사용된 각 구체 타입에 대해 특정하고 하드코딩된 버전으로 변환하는 과정입니다. 이를 통해 제로‑코스트 추상화가 가능해지며, 고수준 제네릭 코드를 작성하면서도 런타임 성능 저하가 발생하지 않습니다.

fn main() {
    let integer = Some(5); // Compiles to Option_i32
    let float = Some(5.0); // Compiles to Option_f64
}
# Cargo.toml
edition = "2021"
use std::ops::Add;

fn add + Copy>(a: T, b: T) -> T {
    a + b
}

fn main() {
    let x = add(1i32, 2i32);
    let y = add(1.5f64, 2.5f64);
    println!("x = {}, y = {}", x, y);
}

모노모피제이션의 트레이드오프

바이너리 부피 증가

각 타입마다 별도의 구체 버전의 제네릭 코드를 생성하면 최종 바이너리 크기가 커질 수 있습니다.

컴파일 시간 증가

컴파일러가 각 구체 버전을 인스턴스화하고 최적화해야 하므로 컴파일 시간이 길어질 수 있습니다.

요약

  • 장점: 제로‑코스트 추상화 — 정적 디스패치, 인라인화, 뛰어난 런타임 성능.
  • 단점: 바이너리 크기 증가와 컴파일 시간 연장.
  • 러스트 철학: 런타임 성능과 안전성을 우선시하므로 모노모피제이션을 기본 전략으로 채택합니다.
0 조회
Back to Blog

관련 글

더 보기 »