[rust] 제네릭 인자 경계 조건

Rust에서 제네릭 함수나 구조체를 정의할 때, 특정 유형의 제네릭 인자에 대한 제약을 걸고 싶을 때가 있습니다. 예를 들어, 숫자형만을 다루는 함수를 작성할 때 특정 숫자형에 대한 조건을 추가하고 싶을 수 있습니다.

이를 위해 Rust에서는 트레이트 바운드를 사용합니다. 트레이트 바운드는 제네릭 유형이 특정 트레이트를 구현해야 한다는 제약을 정의합니다.

제네릭 인자에 대한 트레이트 바운드 정의하기

아래는 제네릭 함수를 사용하여 정렬된 벡터에서 특정 값을 찾는 동작을 수행하는 예제입니다.

fn find_value<T: PartialOrd>(array: &[T], value: T) -> Option<usize> {
    for (i, item) in array.iter().enumerate() {
        if *item == value {
            return Some(i);
        }
    }
    None
}

위의 find_value 함수에서 T: PartialOrdTPartialOrd 트레이트를 구현한다는 것을 나타냅니다. 즉, T 유형은 부분적으로 순서를 정의해야 합니다.

여러 개의 트레이트 바운드 정의하기

여러 개의 트레이트에 대한 바운드를 정의할 수도 있습니다. 예를 들어, TDebugDisplay 트레이트를 구현해야 하는 경우:

fn example_function<T: Debug + Display>(value: T) {
    // 함수 내용
}

이제 제네릭 인자에 대한 제약을 걸기 위해 트레이트 바운드를 정의하는 방법에 대해 알게 되었습니다. 이를 통해 더 안정적이고 안전한 코드를 작성할 수 있습니다.