C++ Chapter 14.1 : 예외 처리의 기본

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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"을 담게 되고 이의 예외를 처리한 후 프로그램이 종료된다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기