본문 바로가기

언어/Rust

[ Rust ] 러스트는 비교시 타입이 달라서 에러가 난 경우

반응형

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_valf32로 변환하거나 float_vali32로 변환한 후에 비교할 수 있습니다.

수정된 예제:

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_valf32로 변환하여 비교가 가능합니다. 이제 컴파일이 정상적으로 진행되며, 출력은 "같습니다."가 됩니다.

반응형