[rust] 제네릭 사용 사례

제네릭은 Rust에서 코드를 추상화하고 유연하게 만드는 강력한 도구입니다. 여러 데이터 유형 및 함수에 대해 범용적으로 작업할 수 있습니다. 여기에는 제네릭을 사용하여 일반적으로 해당되는 몇 가지 사례가 있습니다.

1. 벡터와 제네릭

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

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    let first_number = get_first(&numbers);
    println!("The first number is {:?}", first_number);
}

위의 예제에서 get_first 함수는 벡터의 첫 번째 항목을 반환하는데, 이때 제네릭을 사용하여 모든 데이터 유형에 대해 작동할 수 있도록 합니다.

2. 함수와 제네릭

fn swap<T>(a: &mut T, b: &mut T) {
    std::mem::swap(a, b);
}

fn main() {
    let mut x = 5;
    let mut y = 10;
    swap(&mut x, &mut y);
    println!("x: {}, y: {}", x, y);
}

위의 예제에서 swap 함수는 주어진 두 값을 교환하는 함수로, 제네릭을 사용하여 모든 데이터 유형에 대해 작동할 수 있도록 합니다.

3. 구조체와 제네릭

struct Point<T> {
    x: T,
    y: T,
}

fn main() {
    let point1 = Point { x: 5, y: 10 }; // 정수
    let point2 = Point { x: 1.0, y: 4.0 }; // 부동 소수점
}

위의 예제에서 Point 구조체는 제네릭을 사용하여 xy 필드가 동일한 데이터 유형일 필요가 없도록 합니다.

제네릭을 사용하여 코드를 보다 유연하고 재사용 가능하게 만들 수 있습니다. Rust에서는 제네릭을 통해 벡터, 함수, 구조체뿐만 아니라 여러 다른 방면에서 코드를 추상화하고 일반화하는 데 활용할 수 있습니다.

더 알아보고 싶다면 Rust 공식 문서를 참고해 주세요.