제네릭

제네릭으로 중복을 타입화하기

제네릭은 여러 타입에서 같은 구조나 알고리즘을 공유하되, 구체 타입의 안전성은 컴파일러가 유지하게 합니다.

추출 기준 함수 본문이 타입만 다르고 로직이 같다면 타입 매개변수 T를 도입해 중복을 제거할 수 있습니다.

Rust는 단형성화를 통해 제네릭 코드를 구체 타입별 코드로 바꾸므로 일반적으로 런타임 비용이 추가되지 않습니다.

함수 제네릭

fn largest<T>처럼 매개변수 타입을 나중에 정하게 합니다.

구조체 제네릭

Point<T>처럼 필드 타입을 재사용 가능한 형태로 둡니다.

enum 제네릭

Option<T>, Result<T, E>처럼 값의 모양과 실패 타입을 분리합니다.

메서드 제네릭

impl<T> 블록으로 제네릭 타입에 동작을 붙입니다.

제네릭 도입 순서

성능 감각
1
비교

중복 함수나 타입에서 달라지는 부분을 표시합니다.

2
매개화

달라지는 타입을 T, E 같은 매개변수로 올립니다.

3
제약

필요한 연산이 있으면 다음 절의 트레이트 바운드로 제한합니다.

제네릭은 아무 타입이나 받는다는 뜻이 아니라, 같은 패턴을 타입 안정성을 잃지 않고 재사용한다는 뜻입니다.