Rust 는 실패를 둘로 나누고, 그 구분이 모든 걸 빚어: 프로그램을 멈춰야 하는 복구 불가 에러랑, 호출자가 다룰 수 있는 복구 가능 에러. 이 레슨은 첫 번째: panic!.
프로그램이 그냥 멈춰야 할 때
panic! 은 '뭔가 너무 잘못돼서 계속하는 게 무의미해' 라는 뜻이야. 스택을 풀고, 소멸자를 돌리고, 스레드를 중단해. 절대 일어나면 안 되는 버그에 손 뻗어 — 위반된 불변식, 수학적으로 범위 안이 보장된 인덱스, '이 경우는 진짜 불가능' 가지에.
unwrap 과 expect
Option 이나 Result 의 .unwrap() 은 None/Err 면 panic 해. .expect("메시지") 는 같은데 네 메시지를 panic 에 담아 — 엄격히 더 나아, 메시지가 미래의 너한테 왜 실패할 리 없다고 확신했는지 말해주니까. 둘 다 변장한 panic 이야: 실패가 예상된 조건이 아니라 진짜 버그를 뜻할 때 써.
panic 은 버그용이지 예상된 실패용이 아니야. 사용자가 안 만들었을 수도 있는 없는 파일은 복구 가능 에러야 —
Result 를 반환해. 네 코드가 지켰어야 할 위반된 불변식은 버그 야 — panic 하고 코드를 고쳐. 둘을 헷갈리면 프로덕션 크래시나 에러 처리 연극 중 하나를 얻어.panic 은 예외가 아니야
panic! 을 throw-and-catch 메커니즘으로 쓰지 마. 푸는 panic 을 잡을 수는 있지만, 제어 흐름이 아니라 진짜 복구 불가 상황용이야. 복구 가능 에러는 Result 값으로 흐르고, 이 트랙 나머지가 그거에 관한 거야.