[Rust] 6장 에러 처리

1. Result 타입

Result 타입은 성공과 실패를 표현하는 열거형(Enum)으로, 두 가지 변형이 있습니다.

  • Ok(T): 성공적인 결과를 포함
  • Err(E): 에러를 포함
fn divide(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err(String::from("0으로 나눌 수 없음"))
    } else {
        Ok(a/b)
    }
}

fn main () {
   match divide(10.0, 2.0) {
    Ok(result) => println!("Result: {}", result),
    Err(e) => println!("Error: {}", e)
   }

   match divide(10.0, 0.0) {
    Ok(result) => println!("Result: {}", result),
    Err(e) => println!("Error: {}", e)
   }
}

2. Option 타입 

Option은 같이 있을 수도 있고 없을 수도 있는 경우를 표현하는 열거형으로 두 가지 변형이 있습니다.

  • Some(T): 값이 존재함을 나타냄
  • None: 값이 존재하지 않음을 나타냄
fn find_item(items: &[&str], search: &str) -> Option<usize> {
    for(index, &item) in items.iter().enumerate() {
        if item == search {
            return Some(index);
        }
    }
    None
}


fn main() {
    let items = ["사과", "바나나", "멜론"];

    match find_item(&items, "바나나") {
        Some(index) => println!("바나나의 인덱스: {}", index),
        None => println!("바나나를 찾을 수 없음"),
    }

   match find_item(&items, "포도") {
       Some(index) => println!("포도의 인덱스: {}", index),
       None => println!("포도를 찾을 수 없음"),
   }
}

3. 에러 전파

 Rust에서는 에러를 전파할 때 ? 연산자를 사용하여 간편하게 처리할 수 있습니다. 이 연산자는 Result 또는 Option 타입의 값을 반환하는 함수에서 사용됩니다.

fn may_fail() -> Result<(), String> {
    // 실패할 수 있는 작업
    Err(String::from("Fail!"))
}

fn process() -> Result<(), String> {
      may_fail()?;
      Ok(())
}

fn main() {
      match process() {
        Ok(_) => println!("Success!"),
        Err(e) => println!("Error: {}", e)
      }
}

 

 

GitHub - Koras02/rust-tutorial: https://thinky.tistory.com/category/Back-End/Rust

https://thinky.tistory.com/category/Back-End/Rust. Contribute to Koras02/rust-tutorial development by creating an account on GitHub.

github.com

 

LIST

'Back-End > Rust' 카테고리의 다른 글

[Rust] 8장 제네릭  (0) 2025.03.12
[Rust] 7장 모듈  (0) 2025.03.10
[Rust] 5장 패턴 매칭(Pattern Matching)  (0) 2025.03.06
[Rust] 4장 데이터 타입(Data Types)  (0) 2025.03.02
[Rust] 3장 빌림(Borrowing)  (0) 2025.02.27