C & C++/C++

[C++] try, throw, catch, Exception

  • -
728x90

 

컴퓨터 시스템이 동작하는 도중에 예상하지 못한 오류가 발생하여, 실행되고 있던 프로그램이 중지되는 것을 예외(exception)이라고 한다. 코딩을하면서 이러한 예외 상황을 처리할 수 있도록 하는 것을 예외 처리(exception handling)이라고 하는데, C++은 언어 차원에서 예외 처리 문법을 제공하여, 예외 처리하는 방식을 확장하고 관리하기 쉽도록 해준다.

 

try, throw,  catch

  • try : 예외가 발생할 가능성이 있는 코드 블록
  • throw : try 문에서 발생한 오류에 대한 정보를 전달
  • catch : 발생한 예외에 대해 예외 핸들러가 처리할 내용을 담은 코드 블록

 

C++에서 예외 처리는 다음과 같은 순서로 진행된다.

  1. try문에 도달한 프로그램의 제어는 try문 내의 코드를 실행한다.
  2. 이때 예외가 발생(throw)하지 않으면 프로그램의 제어는 맨 마지막 catch절 바로 다음으로 이동한다.
  3. 만약 예외가 발생하면 catch 핸들러는 다음과 같은 순서로 적절한 catch절을 찾게 된다.
    1. 스택에서 try문과 가장 가까운 catch절부터 차례대로 검사한다.
    2. 만약 적절한 catch절을 찾지 못하면, 바로 다음 바깥쪽 try문 다음에 위치한 catch절을 차례대로 검사한다.
    3. 이러한 과정을 가장 바깥쪽 try문까지 계속 검사하게 된다.
    4. 그래도 적절한 catch절을 찾지 못하면, 미리 정의된 terminate()함수가 호출 된다.
  4. 만약 적절한 catch절을 찾게 되면, throw문의 피연산자는 예외 객체의 형식 매개변수로 전달된다.
  5. 모든 예외 처리가 끝나면 프로그램의 제어는 맨 마지막 catch절 바로 다음으로 이동한다.

 

Exception 클래스

예외 클래스

C++은 여러 예외를 처리하기 위해 exception 헤더 파일을 통한 다양한 예외 클래스를 제공한다. 이러한 예외 클래스는 오류 코드값을 가지는 멤버 변수 및 오류 코드를 검사하거나 오류 메시지를 출력하는 멤버 함수 등 오류에 대한 모든 처리가 가능하도록 다양한 멤버를 포함하고 있다.

 

이와 같은 예외 클래스도 클래스이므로, 상속할 수 있으며 다형성도 성립한다. 또한, 생성자와 연산자에서도 예외 처리 기능을 사용할 수 있다.

exception 클래스

C++은 여러 예외 클래스의 기초 클래스로 사용할 수 있는 exception 클래스를 제공한다. exception클래스는 시스템에 따라 하나의 문자열 포인터를 반환하는 what()이라는 가상 멤버 함수를 제공한다.

이 멤버 함수는 가상 함수이므로, exception 클래스로부터 파생된 클래스 내에서 재정의할 수 있다. exception 클래스의 what() 멤버 함수는 별다른 일을 하지는 않지만, 파생 클래스에서 원하는 문자열을 출력할 수 있도록 재정의할 수 있다.

 

728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.