[rust] 에러 핸들링 및 예외 처리 비교

Rust는 안정적으로 안전하고 효율적인 코드를 작성하기 위한 목적을 가지고 있는 언어이며, 이를 위해 에러 핸들링과 예외 처리에 대한 고유한 방식을 가지고 있습니다. 이번 글에서는 Rust의 에러 핸들링과 전통적인 예외 처리 방식인 C++ 에서의 try-catch 구문을 비교해보겠습니다.

C++에서의 예외 처리

C++에서는 예외 처리를 위해 try, catch, throw 키워드를 사용합니다. 함수 내부에서 발생하는 예외는 throw를 통해 던져지고, 호출자에서는 trycatch를 사용하여 이에 대한 처리를 할 수 있습니다.

다음은 C++에서의 예외 처리 코드의 예시입니다.

#include <iostream>
using namespace std;

void foo() {
  try {
    // 예외 발생 시점
    throw runtime_error("Something went wrong");
  } catch (const exception& ex) {
    // 예외 처리
    cout << "Caught exception: " << ex.what() << endl;
  }
}

int main() {
  foo();
  return 0;
}

Rust에서의 에러 핸들링

반면 Rust에서는 Resultmatch 키워드를 사용하여 에러 핸들링을 수행합니다. 함수의 반환 값으로 Result를 리턴하고, 호출자에서는 match를 사용하여 에러를 처리할 수 있습니다.

다음은 Rust에서의 에러 핸들링 코드의 예시입니다.

use std::error::Error;

fn foo() -> Result<(), Box<dyn Error>> {
    // 에러 발생 시점
    Err("Something went wrong".into())
}

fn main() {
    match foo() {
        Ok(_) => println!("No error"),
        Err(err) => println!("Error occurred: {}", err),
    }
}

결론

Rust의 에러 핸들링은 명시적으로 결과 값을 처리하고, match를 통해 각 상황에 대한 처리를 정의하는 방식을 가지고 있습니다. 이는 코드의 안정성과 가독성을 높여주며, 예외 처리를 통한 런타임 비용을 줄일 수 있습니다. 이러한 특징을 통해 Rust는 안정적이고 안전한 코드를 작성하는 데 큰 도움이 됩니다.

참고문헌:

위의 내용은 C++의 예외 처리와 Rust의 에러 핸들링에 대한 간단한 비교를 통해 둘의 차이점을 확인해보았습니다.