[rust] 제네릭 함수 오버로딩

제네릭 함수 오버로딩은 Rust에서 동일한 함수 이름을 가진 여러 제네릭 함수를 정의하는 것을 의미합니다.

제네릭 함수란?

제네릭 함수는 하나 이상의 제네릭 타입 매개변수를 포함하는 함수입니다. 이를 통해 함수를 여러 다른 타입에서 재사용할 수 있습니다.

fn print_type<T>(value: T) {
    println!("Type: {}", std::any::type_name::<T>());
    // 동적 디스패치(dynamic dispatch)를 사용하려면 사용자 정의 타입인 경우에는 Debug 트레이트가 구현되어야 합니다.
    println!("Value: {:?}", value);
}

위 코드에서 print_type 함수는 제네릭 타입 T를 매개변수로 받아 해당 타입의 이름과 값을 출력하는 함수입니다.

제네릭 함수 오버로딩

Rust는 제네릭 함수의 오버로딩을 지원하지 않습니다. 즉, 동일한 함수 이름과 시그니처를 가진 여러 개의 제네릭 함수를 정의할 수 없습니다. 대신, 제네릭 타입을 활용하여 동일한 함수에서 여러 타입을 처리할 수 있습니다.

예를 들어, 다음과 같이 제네릭 함수를 통해 여러 타입을 다룰 수 있습니다.

fn max<T: Ord>(a: T, b: T) -> T {
    if a > b {
        a
    } else {
        b
    }
}

위 코드에서 max 함수는 Ord 트레이트를 구현한 제네릭 타입 T를 매개변수로 받아 큰 값을 반환하는 함수입니다.

결론

Rust에서는 동일한 함수 이름을 가진 여러 개의 제네릭 함수를 오버로딩하는 것이 불가능하며, 대신 제네릭 타입과 트레이트를 이용하여 여러 다양한 타입을 다룰 수 있습니다.

참고 자료: The Rust Programming Language