Rust에서 ::의 용도 정리표

::은 “어디에 속한 항목인지” 또는 “어떤 타입인지”를 명시할 때 쓰이며, enum일 수도, 모듈일 수도, 제네릭 타입 지정(Turbofish)일 수도 있으며, 연관 함수, 상수 또는 연관 상수에 접근할 때도 사용되고, 트레이트 경로를 통한 메소드 호출 시에도 사용됩니다.

1. Rust에서 ::의 용도 정리표

구분예시설명관련 키워드
모듈/경로 구분자std::fs::File모듈(std) → 하위 모듈(fs) → 항목(File)로 내려가는 경로 지정모듈(module), 네임스페이스(namespace)
enum variant 접근Option::Some(5)Optionenum 안의 Somevariant에 접근enum
연관 함수(associated function) 접근String::from(“hi”)타입(String)의 연관 함수(from) 호출struct, enum, trait
상수 또는 연관 상수 접근std::f64::consts::PIf64타입의 연관 상수 PI에 접근상수(const)
Turbofish (제네릭 타입 명시)“42”.parse::<i32>()제네릭 함수의 타입 매개변수를 명시적으로 지정제네릭(Generic)
제네릭 타입 생성 시 타입 지정Vec::<i32>::new()제네릭 타입(Vec<T>)의 매개변수를 명시적으로 지정제네릭 타입
트레이트 경로를 통한 메서드 호출<T as SomeTrait>::method()특정 트레이트에 정의된 메서드를 명시적으로 호출트레이트(impl 충돌 해결용)

2. 예시 모음

mod math {
    pub const PI: f64 = 3.14;
}

#[derive(Debug)]
#[allow(dead_code)]
enum Color {
    Red,
    Blue,
}

fn main() {
    // 1️⃣ 모듈 경로
    println!("{}", math::PI);        // -> 3.14

    // 2️⃣ enum variant 접근
    let c = Color::Red;
    println!("{c:?}");

    // 3️⃣ 연관 함수
    let s = String::from("hello");
    println!("{s:?}");

    // 4️⃣ Turbofish
    let n = "42".parse::<i32>().unwrap();
    println!("{n:?}");

    // 5️⃣ 제네릭 타입 지정
    let v = Vec::<i32>::new();
    println!("{v:?}");

    // 6️⃣ 트레이트 메서드 명시 호출
    use std::string::ToString;
    let x = 10;
    let s = <i32 as ToString>::to_string(&x);
    println!("{}", s);  // "10"
}    

위 코드의 실행 결과는 아래와 같습니다.

::의 다양한 용도 실행 결과

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다