러스트는 안정적이고 안전한 프로그래밍 언어로 알려져 있습니다. 에러 처리도 러스트 프로그래밍에서 중요한 주제 중 하나입니다. 이 글에서는 러스트 코드에서의 에러 처리 방법을 알아보겠습니다.
Result 타입을 사용한 에러 처리
러스트에서는 주로 Result
타입을 사용하여 에러를 처리합니다. Result
는 Ok
또는 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
를 반환합니다.
러스트에서는 이 외에도 여러 가지 에러 처리 방법과 라이브러리를 제공하고 있으며, 개발자는 프로젝트에 적합한 에러 처리 방식을 선택하여 사용할 수 있습니다.
에러 처리에 대한 자세한 내용은 러스트 공식 문서를 참고하시기 바랍니다.