예외 처리란?
예외 처리는 어떤 일을 시도하다가 문제가 생기면 예외 처리를 하는 것이다. 프로그램이 작동되다 보면 예외는 존재하기 만련이다.
예외 처리는 문제 발생 시 문제를 집어던지고 받는 쪽에서 해결하는 식으로 흘러간다.
#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] 양의 정수를 입력해야 합니다.
예외 처리 클래스를 만들어서 처리하였다. 프로그램 내부에 만들어야 하는 모든 예외 정보를 한 클래스에서 만들면 유지 보수, 디버깅이 용이하다.
'C++' 카테고리의 다른 글
[C++] sort 함수로 정수, 문자열 오름차순 내림차순 정렬하기 (0) | 2020.01.14 |
---|---|
[C++] 스택 풀기(Stack unwinding) (0) | 2020.01.02 |
[C++] 스마트 포인터 - shared_ptr과 unique_ptr (0) | 2019.12.31 |
[C++] 스마트 포인터 - auto_ptr (0) | 2019.12.31 |
[C++] friend 함수와 friend 클래스 (0) | 2019.12.30 |