반응형
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
로 변환하여 비교가 가능합니다. 이제 컴파일이 정상적으로 진행되며, 출력은 "같습니다."가 됩니다.
반응형
'언어 > Rust' 카테고리의 다른 글
[ Rust ] tuples - 다른 데이터 타입을 하나로 묶음으로 결학하기 (1) | 2024.10.23 |
---|---|
[ Rust ] 유리수, 복소수, 없는 값 (null) 타입 (0) | 2024.09.08 |
[ Rust ] 숫자 타입 - 스칼라 수를 표현할 수 있는 러스트 타입 (0) | 2024.09.08 |
[ Rust ] 2, 8, 16 진수 - 정수 변수 선언하기 (0) | 2024.09.08 |
[ Rust ] 숫자 변수 선언하기 (0) | 2024.08.27 |