Rust 제네릭 타입에 대해(Generic type)

고승우·2023년 6월 1일
0
post-thumbnail

Rust Generic Data Types 공식 doc

제네릭 타입 (Generic Data Types)

structfunction signature 들을 정의할 때 사용하므로써, 다양한 구체적인 데이터 유형에서 사용할 수 있게 한다. 구체화된 타입이나 다른 속성들에 대해 추상화할 수 있다. 제네릭 타입을 사용한다고 해서 runtime cost는 들지 않으므로, 부담없이 사용할 수 있다.


Function Definitions

제네릭을 사용한 함수를 정의할 때, 일반적으로 매개 변수의 데이터 유형과 반환 값을 지정하는 부분에 제네릭을 배치한다.

fn largest<T>(list: &[T]) -> &T {
    let mut largest = &list[0];

    for item in list {
        if item > largest {
            largest = item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);
}

이 코드는 trait 때문에 컴파일이 되지는 않는다.

Struct Definitions

구조를 선언할 때 또한 제네릭 타입을 활용할 수 있다.

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

fn main() {
    let integer = Point { x: 5, y: 10 };
    let float = Point { x: 1.0, y: 4.0 };
}

Enum Definitions

structs 에서와 마찬가지로 우리는 enum을 정의할 때도 제네릭 타입을 쓸 수 있다.

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

enum Result<T, E> {
    Ok(T),
    Err(E),
}

Method Definitions

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

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.x
    }
}

fn main() {
    let p = Point { x: 5, y: 10 };

    println!("p.x = {}", p.x());
}
profile
٩( ᐛ )و 

0개의 댓글