타입 추정

타입 추정 엔진은 아주 똑똑합니다. 선언할 때의 값만 보는 것이 아니라, 그 변수가 이후 어떻게 이용되는지까지 모두 추적해 타입을 추정합니다. 여기 타입 추정에 대한 고급 예시가 있습니다:

fn main() {
    // 접미사에 의해 컴파일러는 `elem`이 `u8`임을 확인합니다.
    let elem = 5u8;

    // 빈 벡터(늘어날 수 있는 배열) 선언
    let mut vec = Vec::new();
    // 여기에서 컴파일러는 `vec`이 정확하게 어느 타입인지 모릅니다. 그저 무언가의
    // 벡터(`Vec<_>`)라는 것 정도만 확인하죠.

    // `elem`을 이제 vec에 넣어봅시다.
    vec.push(elem);
    // 아하! 이 시점에서 컴파일러는 `vec`이 `u8`의 벡터(`Vec<u8>`)임을 확인합니다.
    // TODO ^ 위의 `vec.push(elem)` 줄을 주석 처리해보세요

    println!("{:?}", vec);
}

변수에 대한 타입 선언 없이도, 컴파일러도 행복하고 프로그래머도 행복합니다!