추론 타입
추론 타입 (Inferred type)
타입을 직접 다 쓰지 않고, "컴파일러가 알아서 정해줘" 하고 맡기는 자리, 그게 바로 추론 타입(inferred type) 이에요. 타입 위치에 밑줄 _ 를 쓰면 주변 정보를 바탕으로 컴파일러가 타입을 추론해 줘요. 어떤 상황에서 유용한지 살펴볼게요.
출처: Rust Reference
본문
문법 (Syntax)
InferredType → _
어려울 게 없어요. 추론 타입은 그냥 _ 하나예요.
의미 (Semantics)
추론 타입은 사용 가능한 주변 정보를 바탕으로 가능하면 타입을 추론하도록 컴파일러에게 요청해요.
추론 타입은 제네릭 인자(generic arguments) 에서 자주 쓰여요. 다음 예시를 볼게요.
#![allow(unused)]
fn main() {
let x: Vec<_> = (0..10).collect();
}
여기서 Vec<_> 의 _ 에는 collect 의 결과 타입이 들어가요. 타입을 명시하지 않아도 Vec<i32> 같은 구체적인 타입으로 추론되는 거죠.
제약 (Constraint)
하지만 어디서나 쓸 수 있는 건 아니에요. 아이템의 시그니처(signature) 에서는 추론 타입을 사용할 수 없어요. 시그니처는 문맥 없이 그 자체로 타입이 결정되어야 하니까요.
더 알아보기 (Learn more)
- 타입 (Types) — Rust의 전체 타입 체계
- 제네릭 (Generics) —
_를 자주 만나는 제네릭 매개변수