패닉(Panics)
“변수” 섹션에서 구현한 speed 함수를 다시 한 번 살펴볼까요? 아마 코드는 다음과 같을 것입니다.
fn speed(start: u32, end: u32, time_elapsed: u32) -> u32 {
let distance = end - start;
distance / time_elapsed
}
혹시 눈썰미가 좋으신 분이라면 한 가지 문제점1을 발견하셨을지도 모릅니다. 만약 time_elapsed가 0이라면 어떻게 될까요?
Rust 플레이그라운드에서 직접 실행해 보세요! 그러면 프로그램은 다음과 같은 오류 메시지를 남기며 즉시 종료됩니다.
thread 'main' panicked at src/main.rs:3:5:
attempt to divide by zero
이것을 바로 **패닉(Panic)**이라고 부릅니다. 패닉은 프로그램이 더 이상 정상적으로 실행될 수 없을 정도로 심각한 상황이 발생했음을 알리는 Rust의 신호이자, 복구 불가능한 오류2를 처리하는 방식입니다. ’0으로 나누기’가 바로 이런 오류에 해당하죠.
panic! 매크로
우리가 직접 panic! 매크로3를 호출해서 의도적으로 패닉을 일으킬 수도 있습니다.
fn main() {
panic!("여기는 패닉 지점입니다!");
// 아래 줄은 절대 실행되지 않습니다.
let x = 1 + 2;
}
Rust에는 복구 가능한 오류를 세련되게 처리하는 별도의 메커니즘이 있으며, 이는 나중에 자세히 다룰 예정입니다. 지금은 조금 거칠더라도 확실한 오류 알림 수단인 패닉을 사용해 보겠습니다.
더 읽어보기
Exercise
The exercise for this section is located in 02_basic_calculator/04_panics