본문 바로가기

언어/Rust

[ Rust ] 유리수, 복소수, 없는 값 (null) 타입

반응형

Rust는 기본적으로 정수형과 부동 소수점형의 스칼라 타입을 제공하지만, 유리수(분수)나 복소수와 같은 수학적인 데이터 타입은 표준 라이브러리에서 직접 지원하지 않습니다. 대신 이러한 타입을 사용하기 위해서는 외부 크레이트를 활용하거나 직접 구현해야 합니다. 또한, Rust에서는 "없는 값"을 표현할 때 사용하는 특별한 타입들도 있습니다.

1. 유리수 (Rational Numbers)

유리수(분수)를 Rust에서 사용하려면, 외부 라이브러리인 num-rational 크레이트를 사용하는 것이 일반적입니다. 이 크레이트는 유리수를 표현하고 계산할 수 있는 기능을 제공합니다.

유리수 예제 (using num-rational crate):

# Cargo.toml에 다음을 추가합니다.
[dependencies]
num-rational = "0.4"
num-bigint = "0.4"  # 큰 정수형을 다룰 때 사용
use num_rational::Rational32;

fn main() {
    let a = Rational32::new(1, 2); // 1/2
    let b = Rational32::new(3, 4); // 3/4

    let sum = a + b;
    println!("유리수 덧셈 결과: {}", sum); // 출력: 5/4
}

2. 복소수 (Complex Numbers)

복소수는 표준 라이브러리에서 지원하지 않지만, 외부 크레이트인 num-complex를 사용하여 복소수를 다룰 수 있습니다.

복소수 예제 (using num-complex crate):

# Cargo.toml에 다음을 추가합니다.
[dependencies]
num-complex = "0.4"
use num_complex::Complex;

fn main() {
    let a = Complex::new(1.0, 2.0); // 실수부 1.0, 허수부 2.0
    let b = Complex::new(3.0, 4.0); // 실수부 3.0, 허수부 4.0

    let sum = a + b;
    println!("복소수 덧셈 결과: {}", sum); // 출력: 4 + 6i
}

3. 없는 값 (None 타입 및 Option 타입)

Rust에서는 값이 "없음"을 표현할 때 Option 타입을 사용합니다. OptionSome(T) 또는 None의 두 가지 상태를 가질 수 있습니다. None은 값이 없음을 나타내며, 이를 통해 Rust는 null 포인터 문제를 해결합니다.

Option 타입 예제:

fn find_even_number(numbers: &[i32]) -> Option<i32> {
    for &num in numbers {
        if num % 2 == 0 {
            return Some(num);
        }
    }
    None
}

fn main() {
    let numbers = vec![1, 3, 5, 7, 8];

    match find_even_number(&numbers) {
        Some(even) => println!("첫 번째 짝수: {}", even),
        None => println!("짝수를 찾을 수 없습니다."),
    }
}

이 예제에서 Option 타입은 짝수를 찾으면 Some(number)를 반환하고, 찾지 못하면 None을 반환합니다. 이를 통해 값이 존재하지 않는 상황을 안전하게 처리할 수 있습니다.

요약:

  • 유리수: Rust에서 유리수는 표준 라이브러리에는 없으나, num-rational 크레이트를 통해 사용할 수 있습니다.
  • 복소수: 복소수는 num-complex 크레이트를 통해 지원됩니다.
  • 없는 값: Rust에서는 NoneOption<T> 타입을 사용해 값이 없음을 표현하며, 이를 통해 null 참조와 같은 문제를 방지합니다.

Rust의 외부 라이브러리 생태계를 통해 유리수와 복소수 같은 수학적 타입을 쉽게 사용할 수 있으며, Option 타입으로 없는 값을 안전하게 처리할 수 있습니다.

반응형