[Rust 공식문서 한국어 정리] 90. Rust panic! 매크로 가이드
[Rust 공식문서 한국어 정리] 90. Rust panic! 매크로 가이드
원문 제목: macro std::panic!
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 panic! 매크로가 제공하는 프로그램 강제 종료 메커니즘을 설명합니다.
복구 불가능한 오류 상황에서 panic을 사용하는 적절한 기준을 다룹니다.
패닉 발생 시 스택 언와인딩과 프로세스 중단의 차이를 학습합니다.
panic 메시지 포맷팅과 커스텀 패닉 핸들러 설정 방법을 정리합니다.
Result와 panic의 사용 경계를 명확히 하여 안정적인 코드를 작성하는 방법을 설명합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① panic! — 복구 불가능한 오류를 즉시 보고하고 종료
② 스택 언와인딩 — panic 시 소멸자 호출 및 스택 정리
③ abort — 프로세스 즉시 종료(스택 정리 없음)
④ set_hook — 커스텀 패닉 핸들러 등록
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
panic! 매크로는 프로그램이 더 이상 안전하게 진행할 수 없을 때 사용됩니다.
인자로 전달된 메시지는 stderr에 출력된 후 스택 언와인딩이 시작됩니다.
panic!("메시지: {}", value) 형태로 포맷 문자열을 사용할 수 있습니다.
내부적으로 format!과 동일한 포맷팅 규칙을 따릅니다.
스택 언와인딩 중에는 현재 스코프의 모든 변수의 drop 메서드가 호출됩니다.
이 자원 정리 과정에서 추가 panic이 발생하면 abort로 전환됩니다.
Cargo.toml에서 panic = "abort"로 설정하면 스택 언와인딩 없이 즉시 종료합니다.
abort 모드는 바이너리 크기가 작아지지만 메모리 누수 가능성이 있습니다.
std::panic::set_hook으로 전역 패닉 핸들러를 등록할 수 있습니다.
기본 훅은 스택 트레이스를 포함한 오류 메시지를 stderr에 출력합니다.
커스텀 훅은 로깅 시스템 연동이나 사용자 친화적 메시지 표시에 활용됩니다.
catch_unwind 함수를 사용하면 특정 클로저의 panic을 포착할 수 있습니다.
catch_unwind는 FFI 경계나 스레드 풀에서 작업 실패를 격리하는 데 유용합니다.
그러나 catch_unwind는 모든 panic을 잡지 못하며 abort로 인한 종료는 막을 수 없습니다.
unwrap()과 expect()도 내부적으로 panic!을 호출하므로 남용을 피해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
프로그램 초기화 실패 시 조기 종료를 위해 panic!을 적절히 사용합니다.
불변성 위반이나 계약 위반 상황에서 assert!와 함께 활용합니다.
서버 스레드에서는 catch_unwind로 panic을 격리하고 로그를 남깁니다.
임베디드에서는 abort 모드로 스택 언와인딩 오버헤드를 제거합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
panic!은 복구 불가능한 오류 처리의 마지막 수단입니다.
스택 언와인딩과 abort 모드의 특성을 이해하고 상황에 맞게 선택합니다.
Result를 통한 오류 전파가 가능하면 panic 대신 사용하는 것이 원칙입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/macro.panic.html
std::panic: https://doc.rust-lang.org/std/panic/
#Rust #panic #오류처리 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30