언어/Rust
[ Rust ] 러스트는 비교시 타입이 달라서 에러가 난 경우
Soso Dev
2024. 9. 8. 09:59
반응형
Rust에서는 서로 다른 데이터 타입을 비교할 수 없도록 엄격한 타입 시스템을 사용합니다. 이로 인해 서로 다른 타입 간의 직접적인 비교는 컴파일 오류를 발생시키며, 이는 프로그래머가 의도하지 않은 실수를 방지하는 데 도움이 됩니다. 예를 들어, 정수형(i32
)과 실수형(f32
)은 서로 다른 타입이므로 직접 비교할 수 없습니다.
이러한 타입 안전성은 Rust의 주요 특징 중 하나로, 잘못된 타입 간의 비교로 인한 논리적 오류를 사전에 방지해 줍니다.
비교 불가 예시:
아래 코드는 i32
타입의 정수와 f32
타입의 부동 소수점을 비교하려고 시도하지만, 컴파일 시 오류가 발생합니다.
fn main() {
let int_val: i32 = 10;
let float_val: f32 = 10.0;
// 컴파일 오류 발생!
// 서로 다른 타입(i32와 f32)의 비교는 허용되지 않습니다.
if int_val == float_val {
println!("같습니다.");
} else {
println!("다릅니다.");
}
}
컴파일러 오류 메시지:
error[E0277]: can't compare `i32` with `f32`
--> main.rs:7:16
|
7 | if int_val == float_val {
| ^^ no implementation for `i32 == f32`
|
= help: the trait `PartialEq<f32>` is not implemented for `i32`
이 오류는 i32
타입과 f32
타입이 서로 다른 데이터 타입이기 때문에 직접 비교할 수 없다는 것을 나타냅니다.
해결 방법:
두 타입을 비교하려면 동일한 타입으로 변환해야 합니다. 예를 들어, int_val
을 f32
로 변환하거나 float_val
을 i32
로 변환한 후에 비교할 수 있습니다.
수정된 예제:
fn main() {
let int_val: i32 = 10;
let float_val: f32 = 10.0;
// int_val을 f32로 변환하여 비교
if (int_val as f32) == float_val {
println!("같습니다.");
} else {
println!("다릅니다.");
}
}
위 예제에서는 int_val
을 f32
로 변환하여 비교가 가능합니다. 이제 컴파일이 정상적으로 진행되며, 출력은 "같습니다."가 됩니다.
반응형