728x90
Rust기초알기(6) - 트레이트와 제네릭
6.1 트레이트 개념과 사용법
6.2 제네릭 타입과 함수
6.3 트레이트의 상속과 구현
[목차] Rust Programming - Rust 기초 알기 목차.Zip
#Rust프로그래밍 #Rust언어기초 #Rust기초문법 #Rust기초알기
Rust기초알기 - 6.2 제네릭 타입과 함수
제네릭(Generic) 타입
제네릭 타입은 코드에서 사용될 수 있는 다양한 타입을 대표하는 매개변수화된 타입입니다. 이를 사용하여 함수, 구조체, 열거형 등을 정의할 수 있습니다. 일반적으로 제네릭 타입은 대문자로 표시되며, 실제 타입으로 대체될 때까지 추상화된 상태로 유지됩니다.
제네릭 함수는 다양한 타입에 대해 동작하는 함수로, 특정 타입에 의존하지 않고 일반적인 작업을 수행할 수 있습니다. 함수 정의 시 제네릭 타입을 사용하여 매개변수의 타입을 일반화할 수 있습니다.
1.제네릭(Generic) 함수의 작성
다음은 벡터의 요소를 출력하는 간단한 제네릭 함수의 예
fn print_vector<T>(vector: Vec<T>) {
for element in vector {
println!("{}", element);
}
}
- T는 제네릭 타입 매개변수로 사용되었습니다.
- print_vector 함수는 Vec<T> 타입의 vector 매개변수를 받으며, 이 벡터의 모든 요소를 출력합니다.
2.제네릭(Generic) 함수의 호출
호출 시에 실제 타입을 명시하면 해당 타입에 맞게 함수가 인스턴스화됩니다.
let int_vector = vec![1, 2, 3];
print_vector(int_vector); // 정수 벡터 출력
let str_vector = vec!["Hello", "World"];
print_vector(str_vector); // 문자열 벡터 출력
- print_vector 함수는 정수 벡터와 문자열 벡터 모두에 대해 동작합니다.
- 이는 제네릭 함수가 여러 타입에서 작동하는 재사용 가능한 코드를 생성할 수 있음을 보여줍니다.
제네릭은 Rust 코드에서 일반적으로 사용되며, 컴파일러는 각각의 인스턴스에 대해 타입 검사와 코드 생성을 수행합니다.
제네릭(Generic) 타입을 이용한 예시
제네릭을 사용하여 벡터(Vector) 데이터 구조를 구현하는 간단한 예시 입니다.
struct Vector<T> {
x: T,
y: T,
}
impl<T> Vector<T> {
fn new(x: T, y: T) -> Self {
Vector { x, y }
}
fn get_x(&self) -> &T {
&self.x
}
fn get_y(&self) -> &T {
&self.y
}
}
fn main() {
let vector = Vector::new(3.14, 2.71);
println!("x: {}", vector.get_x());
println!("y: {}", vector.get_y());
}
// Results
// x: 3.14
// y: 2.71
- Vector<T>는 x와 y라는 두 개의 필드를 가지는 구조체입니다. 이 필드는 동일한 제네릭 타입 T로 선언되어 어떤 타입이든 저장할 수 있습니다.
- impl<T> Vector<T>는 Vector<T> 타입에 대한 제네릭 구현을 정의합니다. 이 구현에서는 new라는 제네릭 함수를 정의하며, x와 y 값을 받아 Vector 구조체를 생성합니다.
- get_x와 get_y 메서드는 구조체 Vector<T>의 인스턴스에 대한 불변 참조자를 반환합니다. 이를 통해 x와 y 필드에 접근할 수 있습니다. 반환된 참조자는 &T 타입으로 되어 있어 T 타입의 값을 참조하는 데 사용됩니다.
- 제네릭 구조체의 메서드에서 T 타입을 사용하여 벡터의 요소에 접근하고 반환합니다.
- Vector<T>를 다양한 타입에 대해 재사용할 수 있습니다.
- main 함수에서는 Vector 구조체의 제네릭 인스턴스를 생성하고, get_x와 get_y 메서드를 통해 x와 y 값을 출력합니다. Vector::new 함수는 3.14와 2.71이라는 f64 타입의 값을 받아 Vector<f64> 타입의 인스턴스를 생성합니다
728x90
반응형