[rust] 러스트 코드의 에러 처리 방법

러스트는 안정적이고 안전한 프로그래밍 언어로 알려져 있습니다. 에러 처리도 러스트 프로그래밍에서 중요한 주제 중 하나입니다. 이 글에서는 러스트 코드에서의 에러 처리 방법을 알아보겠습니다.

Result 타입을 사용한 에러 처리

러스트에서는 주로 Result 타입을 사용하여 에러를 처리합니다. ResultOk 또는 Err 두 가지의 값 중 하나를 가질 수 있습니다. 성공적인 결과는 Ok에, 에러 발생 시에는 Err에 저장됩니다.

다음은 Result를 이용한 간단한 에러 처리 예시입니다.

use std::fs::File;

fn main() -> Result<(), std::io::Error> {
    let f = File::open("example.txt")?;

    Ok(())
}

예시에서 File::open은 파일을 열 때 발생할 수 있는 에러를 Result로 반환합니다. main 함수의 반환 타입은 Result<(), std::io::Error>으로, 성공 시에는 Ok(())를 반환하고, 에러가 발생한 경우에는 Err에 해당하는 에러 값이 반환됩니다.

패닉과 언랩핑

러스트에서는 unwrap 함수를 이용하여 Result 타입이 Err인 경우에 프로그램을 강제로 종료시킬 수 있습니다.

let f = File::open("example.txt").unwrap();

이 방법은 간편하지만, 에러가 발생한 경우에는 프로그램이 강제로 종료되므로 주의가 필요합니다.

커스텀 에러 타입

러스트에서는 커스텀 에러 타입을 정의하여 사용할 수도 있습니다. 이를 통해 에러에 대한 자세한 정보를 포함한 사용자 정의 에러를 만들어 사용할 수 있습니다.

enum CustomError {
    FileNotFound,
    PermissionDenied,
}

fn open_file(filename: &str) -> Result<File, CustomError> {
    // 파일 오픈 실패 시
    Err(CustomError::FileNotFound)
}

위 예시에서 open_file 함수는 Result를 반환하는데, 성공 시에는 File을 반환하고, 실패 시에는 CustomError를 반환합니다.

러스트에서는 이 외에도 여러 가지 에러 처리 방법과 라이브러리를 제공하고 있으며, 개발자는 프로젝트에 적합한 에러 처리 방식을 선택하여 사용할 수 있습니다.

에러 처리에 대한 자세한 내용은 러스트 공식 문서를 참고하시기 바랍니다.