💡 예외처리 (Exception Handling), try, throw, catch
C 언어로 코딩을 할 때는 if
문으로 예외를 처리했다. C++에서는 예외처리를 위해서 try
, throw
, catch
키워드를 이용한다. 예외처리를 위한 코드와, 프로그램의 논리를 위한 코드를 구분하기 위해서임.
: try 내부에서 예외가 있는지 탐색하는 부분
: try에서 예외를 탐색하면, throw의 인자로 준 변수를 catch로 넘김
: throw에서 던진 변수를 인자로 받아서 catch 내부의 예외처리를 실시
#include <iostream>
int main() {
try {
int level;
std::cin >> level;
if (level < 3)
throw(level);
//아래 코드는 throw호출 시 실행되지 않는다.
std::cout << "you can enter" << std::endl;
std::cout << "input level : " << level << std::endl;
}
catch (int level) {
std::cout << "you cannot enter" << std::endl;
std::cout << "your level : " << level << std::endl;
}
}
//OUTPUT
//input == 3
3
you can enter
input level : 3
//input == 1
1
you cannot enter
your level : 1
sujilee@Sujis-MacBookPro:~/Desktop/cpp test(master⚡) »
swap 함수에서 인자로 들어오는 두 값이 같을 경우의 예외처리를 하고 싶다!
#include <iostream>
void swap(int &a, int &b) {
int temp;
if (a == b)
throw a;
temp = a;
a = b;
b = temp;
}
int main() {
int num1;
int num2;
try {
std::cin >> num1;
std::cin >> num2;
std::cout << "num1 : " << num1 << std::endl;
std::cout << "num2 : " << num2 << std::endl;
std::cout << "------------" << std::endl;
swap(num1, num2);
std::cout << "swap complete" << std::endl;
std::cout << "num1 : " << num1 << std::endl;
std::cout << "num2 : " << num2 << std::endl;
std::cout << std::endl;
}
catch (int sameNum) {
std::cout << "you don't have to swap this" << std::endl;
}
std::cout << "EXIT" << std::endl;
return (0);
}