[rust] 제네릭 코딩 규약

Rust 언어는 제네릭을 지원하여 데이터 타입에 의존하지 않는 함수나 구조체를 정의할 수 있게 해줍니다. 제네릭 코드를 작성할 때는 몇 가지 규약을 따르는 것이 좋습니다.

제네릭 함수와 구조체

제네릭 함수나 구조체를 작성할 때는 타입 파라미터를 사용하여 일반화된 코드를 작성합니다.

예를 들어, 다음은 Option 제네릭 열거형에 대한 간단한 예시입니다.

enum Option<T> {
    Some(T),
    None,
}

fn main() {
    let number: Option<i32> = Option::Some(5);
    let absent_number: Option<i32> = Option::None;
}

제네릭 함수 규약

제네릭 함수를 작성할 때는 함수 본문에서 지정된 타입 파라미터를 정확하게 사용해야 합니다. 또한, 타입 파라미터 이름은 일반적으로 T, U, V와 같이 알파벳 글자로 지정합니다.

fn get_first<T>(list: &Vec<T>) -> Option<&T> {
    list.first()
}

제네릭 제약

제네릭 함수에 대한 제약을 명시할 수 있습니다. 예를 들어, 특정 trait를 구현한 타입에 대해서만 동작하도록 제약을 설정할 수 있습니다.

fn process<T: Display>(item: T) {
    // T는 Display trait을 구현한 타입이어야 한다.
    println!("{}", item);
}

마무리

Rust에서 제네릭을 사용할 때는 타입 안정성을 유지하고 코드를 보다 일반화된 형태로 작성할 수 있는 장점을 살려 제네릭 규약을 지키면서 코드를 작성하는 것이 중요합니다.

참고 자료: The Rust Programming Language - Generics