
209
3
장
주요 개념
아이템
18
: 패닉하지 마라
터무니없이 복잡해 보였는데, 그 때문인지 크기가 딱 맞는 플라스틱 덮개에 ‘
DON
’
T
PANIC
’
이라는 글귀가 큼직하고 친절하게 인쇄되어 있었다.
더글러스 애덤스
Douglas
Adams
이 아이템의 제목을 좀 더 정확히 표현하면 ‘
panic
!
보다 가급적
Result
를 반환하라’고 할 수
있다. 하지만 패닉 (
panic
!
)하지 마라는 표현이 훨씬 귀에 쏙 들어온다.
러스트의 패닉 메커니즘은 프로그램을 복구할 수 없는 수준의 버그가 발생한 경우를 위해 설계
된 것으로,
panic
!
을 통해 스레드를 종료시키는 것이 디폴트 동작이다. 물론 다른 동작으로 얼
마든지 대체할 수 있다.
특히 예외 시스템을 갖춘 언어 (예: 자바나
C
++ )에서 러스트로 넘어온 사람들은
std
::
panic
::
catch
_
unwind
로 예외를 표현하려는 경향이 있는데, 아마도 콜 스택의 더 높은 곳에서 패닉
을 잡을 수 있는 것처럼 보이기 때문이다.
예를 들어 다음과 같이 잘못된 입력을 받을 때 패닉을 실행하는 함수가 있다.
fn divide(a: i64, b: i64) -> i64 {
if b == 0 {
panic!("Cowardly refusing to divide by zero!");
}
a / b
}
이 함수에 잘못된 입력값을 주고 호출하면 ...