본문 바로가기

Rust

[Rust] 타입 추론 (Type Inference)

반응형

러스트에서 변수의 타입은 타입에서 추론하거나 일반적으로 유추할 수 있습니다. 이러한 변수를 초기화하는 데 사용되는 표현식입니다.

 

다음과 같이 선언만 문장이 있습니다.:

let number;

위와 같이하고 컴파일하면 에러가 발생합니다. 컴파일러는 그러한 변수에 데이터 유형을 할당할 수 없기 때문에 오류가 에러가 발생합니다. . 메시지는 다음과 같습니다. error[E0282]: type annotations needed 이 에러는 해당 변수의 타입이 지정되어야 함을 의미합니다.

 

아래와 같이 선언후에 어떤 타입인지를 명기해 주어야 합니다.

let number:u32;

컴파일러가 어떤 유형의 변수인지 이해하면 해당 변수에 대한 모든 할당은 해당 타입의 표현식을 사용해야 합니다. 그렇지만, 타입을 추측할 수 있는 경우에는 또한 다음은 확인이 필요합니다

let number1 = 12;
let _number2 = number1;

여기서 숫자 12는 정수 유형이므로 number1 변수도 정수 유형으로 추론할수 있습니다. 마찬가지로 _number2의 경우도 number1이 타입이 정해져있으므로 추론가능하기 때문에 문제가 없습니다. 동일 타입으로 초기화 됩니다.

숫자 3.14를 사용하려고 시도한 이전 예제로 돌아가서 타입 불일치 문제를 해결하는 몇 가지 방법이 있습니다. 한 가지 방법은 아래와 같이 작성하는 것입니다.

let mut n = 1.;
print!("{}", n);
n = 2.;
print!(" {}", n);
n = 3.14;
print!(" {}", n);

위는 아래와 같이 출력됩니다. 

 

1 2 3.14

이 코드에는 부동 소수점 숫자만 있으므로 타입 오류가 없습니다.

let mut n = 1.;
print!("{}", n);
n = 2;
print!(" {}", n);
n = 3.14;
print!(" {}", n);

위와 같이 정수형이 중간에 들어가면, error[E0308]: mismatched types 에러가 발생합니다.

 

러스트는 컴파일 타임에 type check를 하기 때문에 , 타입이 안맞으면 컴파일 자체가 잘 안될 수도 있습니다. 

그래서 이 부분이 실제로 진행하다보면 타입이 살짝 틀려서 컴파일 에러가 난다던가,

의외로 많이 맞닥드리는 경우들 입니다. 이 부분들 참고하셔서 보시면 될것 같습니다. . 

반응형

'Rust' 카테고리의 다른 글

[Rust] string과 str의 차이점은?  (0) 2022.10.11
[Rust] 벡터 (Vector)  (0) 2022.10.03
Rust, If 문 및 loop문, control flow (제어문)  (0) 2020.01.27
Rust, 튜플  (0) 2020.01.20
Rust, 자료형 Numeric(정수)  (0) 2020.01.14