try, catch, throw
예외로 오류 처리하기
try, catch, throw은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
throw로 오류 알리기
throw 문은 예외를 발생시켜 현재 실행 경로를 중단하고 호출 스택을 따라 처리자를 찾습니다.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::runtime_error("boom");
} catch (const std::exception& e) {
std::cout << e.what() << "\n";
}
}try와 catch
예외를 발생시킬 수 있는 코드는 try 블록에 넣고, 일치하는 처리자는 뒤따르는 catch 블록에 작성합니다.
#include <iostream>
#include <stdexcept>
int divide(int a, int b) {
if (b == 0) throw std::invalid_argument("divide by zero");
return a / b;
}
int main() {
try {
std::cout << divide(10, 0) << "\n";
} catch (const std::invalid_argument& e) {
std::cout << "error: " << e.what() << "\n";
}
}const 참조로 catch하기
예외는 항상 const&로 받으십시오. 값으로 받으면 파생 예외가 잘리고 불필요하게 복사됩니다.
여러 catch 블록
처리자를 가장 구체적인 것부터 가장 일반적인 것 순서로 나열하십시오. 처음 일치하는 블록이 실행됩니다.
#include <iostream>
#include <stdexcept>
int main() {
try {
throw std::out_of_range("bad index");
} catch (const std::out_of_range& e) {
std::cout << "range: " << e.what() << "\n";
} catch (const std::exception& e) {
std::cout << "other: " << e.what() << "\n";
}
}스택 되감기
예외가 발생하면 스택이 되감깁니다. throw와 처리자 사이에 있는 모든 지역 객체가 역순으로 소멸됩니다.
#include <iostream>
#include <stdexcept>
struct Trace {
~Trace() { std::cout << "unwound\n"; }
};
void f() {
Trace t;
throw std::runtime_error("x");
}
int main() {
try { f(); } catch (...) { std::cout << "caught\n"; }
}모든 예외를 처리하는 처리자
catch (...) 블록은 모든 예외 형식을 처리합니다. 일반적으로 오류를 기록한 뒤 다시 발생시키는 경우처럼 신중하게 사용하십시오.
예외 다시 발생시키기
처리자 내부에서 인수가 없는 throw;는 현재 예외를 다시 발생시킵니다. 예외 형식이 보존되므로 외부 처리자가 이를 처리할 수 있습니다.
#include <iostream>
#include <stdexcept>
void inner() { throw std::runtime_error("deep"); }
void middle() {
try { inner(); }
catch (...) { std::cout << "logged\n"; throw; } // rethrow
}
int main() {
try { middle(); } catch (const std::exception& e) { std::cout << e.what() << "\n"; }
}표준 예외 계층 구조
대부분의 표준 예외는 std::exception에서 파생되며 what()을 제공합니다. std::exception으로 받으면 모든 표준 예외를 처리할 수 있습니다.
값으로 발생시키고 참조로 받기
임시 예외 객체는 값으로 발생시키십시오. 실행 환경이 이를 안전한 영역에 복사합니다. 잘림을 방지하려면 참조로 받으십시오.
예외와 오류 코드 비교
예외는 오류 경로와 정상 경로를 분리하며 반환 코드와 달리 조용히 무시할 수 없습니다. 진정으로 예외적인 상황에만 사용하십시오.
처리되지 않은 예외는 프로그램을 종료시킵니다
일치하는 처리자가 없으면 std::terminate가 호출되고 프로그램이 중단됩니다. 예상할 수 있는 예외는 항상 처리하십시오.
빠른 확인
예외 처리에 대한 이해도를 테스트해 보십시오.
복습
throw로 오류를 발생시키고 try/catch로 처리하는 방법, 그리고 그 과정에서 스택 되감기가 지역 객체를 소멸시키는 방식을 배웠습니다. const&로 받고, 처리자를 구체적인 것부터 일반적인 것 순서로 배치하며, 인수가 없는 throw;로 예외를 다시 발생시키십시오.
자주 묻는 질문
“try, catch, throw” 강의는 무료인가요?
네 — “try, catch, throw” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“try, catch, throw”에서 뭘 배우나요?
예외로 오류 처리하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“try, catch, throw” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- try, catch, throw
- 예외 안전성
- noexcept 지정자
- 사용자 지정 예외 타입