C++에서 예외 처리는 프로그램 실행 중 발생할 수 있는 예기치 않은 상황을 처리하는 중요한 기능입니다. 예외 처리를 위해 try, catch, throw 키워드를 사용하며, 표준 예외 클래스와 사용자 정의 예외 클래스를 구현할 수 있습니다. 아래에서 각 개념을 자세히 설명하겠습니다.
try, catch, throw 기본 구문
try 블록
try 블록은 예외가 발생할 수 있는 코드를 포함하는 블록입니다. 예외가 발생할 경우 이 블록 내에서 예외가 발생합니다.
#include <iostream>
int main() {
try {
// 예외가 발생할 수 있는 코드
int numerator = 10;
int denominator = 0;
if (denominator == 0) {
throw "나누는 수가 0입니다.";
}
int result = numerator / denominator;
std::cout << "결과: " << result << std::endl;
} catch (const char* msg) {
std::cerr << "예외 발생: " << msg << std::endl;
}
return 0;
}
catch 블록
catch 블록은 try 블록에서 발생한 예외를 처리하는 블록입니다. 발생한 예외의 타입에 따라 적절한 catch 블록이 실행됩니다.
#include <iostream>
int main() {
try {
// 예외가 발생할 수 있는 코드
int numerator = 10;
int denominator = 0;
if (denominator == 0) {
throw "나누는 수가 0입니다.";
}
int result = numerator / denominator;
std::cout << "결과: " << result << std::endl;
} catch (const char* msg) {
std::cerr << "예외 발생: " << msg << std::endl;
}
return 0;
}
throw 키워드
throw 키워드는 예외를 발생시키는 데 사용됩니다. throw 뒤에는 예외를 나타내는 값이나 객체가 옵니다.
#include <iostream>
#include <stdexcept>
int main() {
try {
int age;
std::cout << "나이 입력: ";
std::cin >> age;
if (age < 0) {
throw std::invalid_argument("나이는 음수일 수 없습니다.");
}
std::cout << "나이: " << age << std::endl;
} catch (const std::exception& e) {
std::cerr << "예외 발생: " << e.what() << std::endl;
}
return 0;
}
표준 예외 클래스
C++에서는 표준 예외 클래스들이 <stdexcept> 헤더 파일에 정의되어 있습니다. 주요 표준 예외 클래스에는 다음과 같은 것들이 있습니다:
std::exception: 모든 표준 예외 클래스의 기본 클래스입니다.std::invalid_argument: 잘못된 인수가 전달되었음을 나타내는 예외입니다.std::runtime_error: 런타임 에러가 발생했음을 나타내는 예외입니다.
이 예외 클래스들은 필요한 경우 상속받아 사용자 정의 예외 클래스를 만들 수 있습니다.
사용자 정의 예외 클래스
사용자 정의 예외 클래스를 만들 때에는 표준 예외 클래스를 상속받아 구현합니다. 예를 들어, 특정 조건에서 예외를 발생시키고자 할 때 사용할 수 있습니다.
#include <iostream>
#include <stdexcept>
class MyException : public std::exception {
public:
const char* what() const noexcept override {
return "사용자 정의 예외 발생";
}
};
int main() {
try {
throw MyException();
} catch (const std::exception& e) {
std::cerr << "예외 발생: " << e.what() << std::endl;
}
return 0;
}
예외 처리의 중요성
예외 처리는 프로그램의 안정성을 높이고 예기치 않은 상황에서도 적절하게 대응할 수 있도록 도와줍니다. 특히 파일 입출력, 네트워크 통신 등에서 발생할 수 있는 예외 상황을 미리 예측하여 처리할 수 있습니다.
위의 예제들을 통해 C++에서의 예외 처리의 기본적인 개념과 활용 방법을 이해할 수 있습니다.
