본문 바로가기
프로그래밍/C++

C++ 의 예외처리 메커니즘

by 코끼리_땃쥐 2023. 2. 10.

C++ 은 구조적으로 예외를 처리할 수 있는 메커니즘을 제공한다.

이 메커니즘을 이용하면, 코드의 가독성과 유지 보수성을 높일 수 있다. 예외의 처리를 프로그램의 일반적인 흐름에서 독립시키는 것이 가능하기 때문이다.

 

C++의 예외처리 메커니즘 이해 : try와 catch 그리고 throw의 이해

 

예외 처리 메커니즘과 관련해서 익숙해져야 할 세 가지 키워드는 다음과 같다.

  • try        예외를 발견한다.
  • catch    예외를 잡는다.
  • throw    예외를 던진다.

 

try 블록

 

try 블록은 예외발생에 대한 검사의 범위를 지정할 때 사용된다. 즉, try 블록 내에서 예외가 발생하면, 이는 C++의 예외처리 메커니즘에 의해서 처리가 된다.

 try
 {
 	// 예외발생 예상지역
 }

catch 블록

catch 블록은 try 블록에서 발생한 예외를 처리하는 코드가 담기는 영역으로써, 그 형태가 마치 반환형없는 함수와 유사하다.

catch (처리할 예외의 종류 명시)
{
	// 에외처리 코드의 삽입
}

 

try 블록과 catch 블록

catch 블록은 try 블록의 뒤에 이어서 등장하며, try 블록에서 발생한 예외는 이곳 catch 블록에서 처리가 된다.

try
{
	// 예외발생 예상 지역
}
catch (처리할 예외의 종류 명시)
{
	// 예외처리 코드의 삽입
}

사실 try와 catch는 하나의 문장이다. 따라서 항상 이어서 등장해야하며 다음과 같이 중간에 다른 문장이 오면안된다.

try
{
	// 예외발생 예상지역
}
std::cout << "Simple Message" << std::endl;  // 컴파일 error ! 
catch (처리할 예외의 종류 명시)
{
	// 예외 처리 코드의 삽입
}

 

throw

키워드 throw는 예외가 발생했음을 알리는 문장의 구성에 사용된다.

throw expn;

위의 문장에서 expn은 변수, 상수 그리고 객체 등 표현 가능 모든 데이터가 될 수 있으나, 예외상황에 대한 정보를 담은, 의미 있는 데이터이어야 한다. 그래서 위 문장에서 expn의 위치에 오는 데이터를 가리켜 그냥 '예외'라고 표현하기도 한다.

위의 문장이 실행되면 C++의 예외처리 메커니즘이 동작하여, 일반적인 프로그램의 흐름과는 다른 예외처리의 흐름이 시작된다. 따라서 try와 catch 그리고 throw는 다음의 한 문장으로 정리 될 수 있다.

※ throw에 의해 던져진 '예외'는, '예외'를 감싸는 try 블록에 의해서 감지가 되어 이어서 등장하는 catch 블록에 의해 처리된다.

그리고 이 문장이 의미하는 바를 그림으로 정리하면 다음과 같다.

위 그림에서 의미하는 바가 C++ 의 예외처리 메커니즘이다. 즉, 예외가 발생하면(throw 절이 실행되면), 프로그램의 흐름이 중지되고, catch블록에 의해서 예외처리과정을 거치게 되는데, 이것이바로  C++예외처리 메커니즘이다.

'프로그래밍 > C++' 카테고리의 다른 글

static_cast  (0) 2023.02.14
dynamic_cast  (0) 2023.02.14
클래스 템플릿의 특수화  (4) 2023.02.09
C++ 배열 기반의 문자열 입 출력  (0) 2021.11.09
C++ 입력받기  (0) 2021.11.09

댓글