C++
[C++] 예외 처리(try, throw, catch)
SWBlossom
2020. 1. 1. 12:51
예외 처리란?
예외 처리는 어떤 일을 시도하다가 문제가 생기면 예외 처리를 하는 것이다. 프로그램이 작동되다 보면 예외는 존재하기 만련이다.
예외 처리는 문제 발생 시 문제를 집어던지고 받는 쪽에서 해결하는 식으로 흘러간다.
#include <iostream>
using namespace std;
int main()
{
int a = 100, b;
cout << "100을 나눌 정수를 입력하세요 : ";
cin >> b;
try {
//0으로 나눌 수 없으므로 0을 던짐
if (b == 0) throw b;
//예외가 발생하지 않는다면 실행할 구문
cout << a / b << endl;
}
//던진 0을 받아서 실행할 코드
catch (int ex) {
cout << "Error : " << ex << "로 나눌 수 없습니다." << endl;
}
return 0;
}
결과값:
100을 나눌 정수를 입력하세요 : 0 //입력
Error : 0로 나눌 수 없습니다.
입력값에 0을 입력하자 try문을 나가서 catch문이 실행되었다.
try-catch문에서 catch문은 여러 개로 구현할 수도 있다. 자료형으로 다중화할 수도 있고 catch문 안에 다른 try-catch문이 있을 수도 있다. 또한, 사용자 정의 클래스를 예외 클래스로 만들어 사용할 수도 있다.
다음 예제는 예외 클래스 사용 예이다.
#include <iostream>
using namespace std;
class myClass
{
public:
myClass(int code, const char *msg)
{
errorCode = code;
strcpy_s(errorMsg, sizeof(errorMsg), msg);
}
int getErrorCode() const { return errorCode; }
const char* getErrorMsg() const { return errorMsg; }
private:
int errorCode;
char errorMsg[128];
};
int main()
{
try
{
int input = 0;
cout << "양의 정수를 입력하세요 : ";
cin >> input;
if (input < 0)
{
myClass ex(10, "양의 정수를 입력해야 합니다.");
throw ex;
}
}
catch (myClass & ex)
{
cout << "Error Code [" << ex.getErrorCode() << "] "
<< ex.getErrorMsg() << endl;
}
return 0;
}
결과값:
양의 정수를 입력하세요 : -1 //입력
Error Code [10] 양의 정수를 입력해야 합니다.
예외 처리 클래스를 만들어서 처리하였다. 프로그램 내부에 만들어야 하는 모든 예외 정보를 한 클래스에서 만들면 유지 보수, 디버깅이 용이하다.