7.1 panic!
// panic! 매크로 사용
fn main() {
panic!("치명적인 오류 발생!");
}
// 결과: 프로그램 즉시 종료
// thread 'main' panicked at '치명적인 오류 발생!',
src/main.rs:2:5
// note: run with `RUST_BACKTRACE=1` environment
variable to display a backtrace
에러 처리 방법으로 panic! 매크로를 사용해서 결과를 추적할 수 있다.
7.2 Result 열거형
// Result 열거형 정의
enum Result<T, E> {
Ok(T), // 성공 시 값 T
Err(E), // 오류 시 값 E
}
// 파일 읽기 예제
use std::fs::File;
let f = File::open("hello.txt");
let f = match f {
Ok(file) => file,
Err(error) => panic!("파일 열기 오류: {:?}",
error),
};
위에 panic! 과 Result에 다른 점을 잘 이해하기를 바란다.
7.3 에러 처리 단축어
// unwrap() - Ok 값 반환, Err면 panic!
let f = File::open("hello.txt").unwrap();
// expect() - 오류 메시지 지정 가능
let f = File::open("hello.txt")
.expect("hello.txt 파일을 열 수 없음");
// ? 연산자 - 오류 전파
fn read_username_from_file() -> Result<String,
io::Error> {
let mut f = File::open("hello.txt")?;
let mut s = String::new();
f.read_to_string(&mut s)?;
Ok(s)
}
expect() 함수에 자신이 직접 넣어서 오류 메시지를 커스터마이징 할 수 있다.
? : 오류 호출자에게 전파
'체이닝(Chaining)'은 여러 요소나 메서드를 '쇠사슬처럼' 연속적으로 연결하여 동작하는 방식, 또는 그러한 연결 자체를 의미합니다. 대표적으로 프로그래밍에서는 객체 지향 언어에서 메서드를 연속 호출하는 메서드 체이닝(Method Chaining) 이나 해시 테이블에서 충돌 발생 시 데이터를 연결하는 체이닝 방식
용어들이 무수하게 많이 나온다. 어쩔수 없이 모두 영어다. 잘 이해하고 점점 관련 함수들과 용어들이 나오고 있다. 많이 검색하고 찾아보고 해야 될 것이다.
7.4 에러 처리 전략
위에 내용처럼 상황에 맞게 내가 어떻게 오류를 찾을 것인지 그리고 코드가 문제가 있을때 어떻게 추적하여 오류를 해결할 것인지를 잘 구분해서 사용하면 좋을 것이다.