반응형
예외처리란?
- 예외 상황 : 예외(Exception)는 언어상의 문법적인 오류가 아니라 내가 의도한, 구현한 프로그램의 논리의 맞지 않는 상황을 말합니다.
- ex) 나눗셈을 할 때 나누는 수가 0으로 입력되는 경우를 "예외 상황"이라 하고, 이에 대해 다시 입력을 받거나 프로그램을 종료하는 방법을 정의해주는 것을 "예외 처리"라고 할 수 있습니다.
C++에서 예외 처리를 위해 제공하는 메커니즘은 try, throw, catch로 구성되어 있습니다.
- try - try내부에서 예외가 있는지 탐색을 하는 부분
- throw - try에서 예외를 탐색하면 throw의 인자로 준 변수를 catch로 던집니다.
- catch - throw에서 던진 변수를 인자로 받아서 catch 내부에 프로그래머가 정의한 예외처리가 실시합니다.
예시 1) 0으로 나누었을 때 예외처리
#include <iostream>
using namespace std;
int main(void)
{
int a, b;
//try에서 예외가 있는지 탐색
try{
cin >> a;
cin >> b;
if(b <= 0) {//예외 발생시,
throw b; //throw를 통해 변수 b흫 catch의 파라미터로 보냄
}
cout << "[work]" << endl;
cout << "a :" << a << " , b :" << b << endl;
cout << "a/b :" << a/b <<endl;
}catch(int expn){ //throw에서 보낸 b를 인자를 expn으로 받는다
cout << "[error]" << endl;
cout << "can't use this : " << expn << endl;
}
cout << "Program End" << endl;
return 0;
}
b에 값이 0이 되었을 때에 예외 처리하는 과정입니다. try문에서 throw를 사용하여 인자를 catch로 보내는 과정을 통한 예외처리가 발생하게 됩니다.
예시 2) "swap 함수에서 인자로 받은 값이 같을 시에 예외 처리를 하는 경우
#include <iostream>
using namespace std;
void swap(int &a, int& b){
int tmp;
if(a == b) throw a;
tmp = a;
a = b;
b = tmp;
}
int main(void)
{
int num1;
int num2;
try{
cin >> num1;
cin >> num2;
//try 내부에서 swap 함수 호출
swap(num1, num2);
cout << "\n[swap 완료]" << endl;
cout << "num1 : " << num1 << ", num2 :" << num2 <<endl;
}catch(int expn)
{
cout << "\n[swap 실패]" << endl;
cout << "num1, num2 : " << expn << "으로 동일합니다." << endl;
}
cout <<" ==== Program End ====" << endl;
return 0;
}
값이 다른 인자값이 들어오게 되면 정상적인 로직으로 프로그램을 실행시키고, 값이 같을 경우에는 예외 처리 문을 이용하여, 같이 동일하다는 예외처리를 해주었다.
'study > C++' 카테고리의 다른 글
C++ 정리 (0) | 2020.10.22 |
---|---|
malloc & free를 대체하는 new & delete (0) | 2020.05.20 |
참조자(Reference) (0) | 2020.05.19 |
자료형 bool (0) | 2020.05.19 |
이름공간(namespace)에 대한 소개 (0) | 2020.05.19 |