Rust 입문

[Rust] 데이터 타입 변환과 유추

바로크냥 2022. 9. 25. 07:55

3. 데이터 타입 변환과 유추

데이터 타입 유추” 또는 “데이터 타입 추론”은 이름은 거창하지만 아닙니다.

우리는 이미 데이터 타입 유추를 경험했습니다.

let a = 1;
let b = 10.5;

여기서 a 변수를 선언할 때 데이터 타입을 선언하지 않았습니다.

하지만 Rust 컴파일러는 1을 보고 알아서 i32라고 유추해 줍니다. 

b의 경우처럼 부동소수점 타입은 보통 f64로 유추합니다. 

 

별 다른 맥락이 없는 이런 상황에서 정수형은 i32로, 부동소수점형은 f64로 유추한다고 알려져 있습니다. 만약 다른 타입으로 유추되어야 하는 맥락이라면 당연히 다른 타입으로 유추됩니다.


데이터 타입을 변환할 수도 있습니다.

이때 사용하는 키워드는 ‘as’입니다.

아래 코드는, 데이터 타입 변환 시, 조심 할 부분을 보여 줍니다. 

 let b = 1.1;
 let c = b as i32;
 println!("{}", c);

// 출력
 1

출력은 1입니다.

b는 유추에 의해서 f64입니다.

그런데 c는 ‘b as i32’를 사용해서 i32 타입이 됐습니다.

이때 소수점 부분이 삭제 되고 정수 부분만 남습니다. 

 

다음도 봅시다.

let b:i64 = 123456789;
let c = b as i8;
println!("{}", c);

// 출력
21

같은 정수형이지만 b는 i64입니다.

c는 i8입니다.

c는 b에 비해 차지하는 메모리 크기가 작습니다. 그래서 b에서 잘라내고 일부분만 c에 담습니다.

이런 경우, 어떤 값이 남을지 예측하기 어려울 때가 있습니다.

다른 언어에서도 마찬가지지만, 타입 변환을 할 때는 데이터 크기가 작은 것에서 큰 것으로 변환 하는 것은 비교적 안전한 반면 그 반대는 위험합니다. 

타입 변환을 할 때는 이런 점을 주의해야 합니다.

 

 
반응형