러스트는 Generic 개념을 지원하여 코드의 재사용성을 높이고, 타입 안정성을 보장합니다. Generic은 타입을 일반화하여 코드의 유연성을 높이는 개념입니다.
러스트에서 Generic은 다음과 같이 작성됩니다.
fn function_name<T>(arg1: T, arg2: T) -> T {
// 함수 구현
}
Rust
복사
위 코드에서 T는 Generic 타입 매개변수입니다. T는 함수를 호출할 때 실제 타입으로 대체됩니다. 따라서 function_name 함수는 arg1과 arg2 매개변수로 동일한 타입을 받아들이고, 반환값으로도 동일한 타입을 반환합니다.
러스트 예제 코드
fn get_max<T: std::cmp::PartialOrd>(list: &[T]) -> &T {
let mut max = &list[0];
for item in list.iter() {
if item > max {
max = item;
}
}
max
}
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
let max_number = get_max(&numbers);
println!("최대값: {}", max_number);
}
Rust
복사
위 코드는 제네릭 함수 get_max를 정의하는 코드입니다. get_max 함수는 list 배열에서 가장 큰 값을 찾아서 반환합니다. list 배열은 T 타입의 임의의 요소를 가지고 있습니다.
get_max 함수의 매개변수 list는 &[T] 타입입니다. 이는 T 타입의 임의의 배열을 참조하는 것을 의미합니다. T 타입은 std::cmp::PartialOrd trait를 구현해야 하며, 이는 부분적으로 순서가 있는 타입을 나타냅니다.
main 함수에서는 numbers 배열을 정의하고, get_max 함수를 호출하여 최대값을 찾습니다. 이후 println! 매크로를 사용하여 최대값을 출력합니다.
러스트 예제 코드 해석
get_max 함수는 T 타입 배열에서 가장 큰 값을 찾는 일반화된 함수입니다. 함수의 시그니처는 fn get_max<T: std::cmp::PartialOrd>(list: &[T]) -> &T입니다.
<T: std::cmp::PartialOrd>는 T 타입이 std::cmp::PartialOrd trait를 구현해야 한다는 것을 의미합니다. 이는 T 타입이 부분적으로 순서가 있는 타입이어야 한다는 것을 나타냅니다.
list 매개변수는 &[T] 타입입니다. 이는 임의의 T 타입 배열을 참조하는 것을 의미합니다.
get_max 함수는 가장 큰 값을 찾아서 max 변수에 할당합니다. 이후 list 배열의 모든 요소를 반복하면서 각 요소가 max보다 크면 max 변수를 갱신합니다.
main 함수에서는 numbers 배열을 생성하고, get_max 함수를 호출하여 최대값을 찾습니다. max_number 변수에 반환된 최대값을 할당하고, println! 매크로를 사용하여 최대값을 출력합니다.