study/C++

예외처리 (try catch)

IT공부 2020. 6. 30. 12:17
반응형

예외처리란?

  • 예외 상황 : 예외(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