C++ Chapter 14.1 : 예외 처리의 기본
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 14. 예외처리 : 예외처리의 기본
잘못된 결과를 낳으면 return -1
, 혹은 bool 타입의 flag
를 두어서 잘못되면 if (!flag)
, 이런식으로 예외 처리를 직접 하는 방법도 있다.
Real Time 같은 성능이 중요한 부분을 개발할 땐 예외 처리를 사용하지 않고 위와 같이 직접 처리하고 서버 다운 같은 예측할 수 없는 부분이거나 성능 면에 있어서 좀 느려져도 괜찮다면 간단하고 안정적인 예외 처리 기능을 사용하자.
🔔 try - throw - catch
#include <iostream>
using namespace std;
int main()
{
double x;
cin >> x; // 음수 입력시 예외 발생하도록
try
{
if (x < 0.0) throw string("Negative input");
cout << std::sqrt(x) << endl;
}
catch (string error_message)
{
cout << error_message << endl;
}
return 0;
}
try
- 시도 해 보기. 예외가 발생하지 않으면
try
부분만 실행된다.
- 시도 해 보기. 예외가 발생하지 않으면
throw
catch
에게 에러 메세지를 던진다.- “Negative input” 라는 string 에러 메세지를 던지고 있다.
- 예외가 발생한다고 보면 된다.
catch
throw
가 던진 에러 메세지를 받아서 예외 발생에 대한 대응을 처리한다.string error_message = string("Negative input");
- 발생한 예외를 처리하는 부분이라고 보면 된다.
🔔 주의 사항
예외 처리는 자동 형변환을 해주지 않는다. 데이터 타입을 지키는데 있어 매우 엄격하다.
- throw가 catch에게 에러 메세지를 전달할 때 주의하기
int main()
{
double x;
cin >> x; // 음수 입력시 예외 발생하도록
try
{
if (x < 0.0) throw "Negative input";
cout << std::sqrt(x) << endl;
}
catch (string error_message)
{
cout << error_message << endl;
}
return 0;
}
- 에러 발생
string("Negative input")
은string
타입이고- “Negative input” 는
const char *
타입이다. - 자동 형변환이 되지 않기 때문에
string
타입인error_message
으로const char *
타입인 “Negative input”을 받으려 하면 에러가 난다.- 즉 const char * 타입의 에러 메세지를 받을 수 있는 catch가 없어서 에러가 발생한 것
throw가 던진 것에 대해 타입이 알맞는 catch가 실행된다.
int main()
{
try
{
throw -1;
}
catch (int x)
{
cout << "Catch Integer " << x << endl;
}
catch (string error_message)
{
cout << error_message << endl;
}
return 0;
}
💎출력💎
Catch Integer -1
throw
에서-1
을 던졌다.-1
은 int 이므로catch (int x)
가 실행되어x
에서-1
을 담게 되고 이의 예외를 처리한 후 프로그램이 종료된다.
int main()
{
try
{
throw "My error message";
}
catch (double x)
{
cout << "Catch double" << endl;
}
catch (const char * error_message)
{
cout << "const char *" << error_message << endl;
}
return 0;
}
💎출력💎
const char * My error message
throw
에서"My error message"
을 던졌다."My error message"
은 const char * 이므로catch (const char * error_message)
가 실행되어error_message
에서"My error message"
을 담게 되고 이의 예외를 처리한 후 프로그램이 종료된다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기