[C++] 예외 처리 try - catch 블록의 자세한 사용 방법과 예제 코드

Programming/C++_C#|2023. 7. 30. 08:35
반응형

C++에서 예외 처리는 'try', 'catch', 'throw' 키워드를 사용하여 관리됩니다.

 

- 'try' : 예외가 발생할 수 있는 코드를 포함하는 블록을 설정합니다.

- 'catch' : 특정 타입의 예외가 발생하면 해당 블록 내의 코드를 실행합니다.

- 'throw' : 특정 예외를 발생시킵니다.

try-catch 블록의 사용

try
{
	// 예외를 발생시킬 수 있는 코드
    throw "예외 상황 발생";
}
catch(const char* _exception)
{
	std::cerr << "Error : " << _exception << std::endl;
}
더보기
더보기

참고

cerr은 주로 에러나 예외 발생 시에 사용되며, cout과는 달리 버퍼링을 하지 않아서 빠르게 출력되므로,

사용자에게 신속하게 에러 정보를 보여줄 수 있습니다. 

위 코드에서, 'throw "예외 발생";' 는 문자열 예외를 발생시킵니다.

이 예외는 그 다음에 오는 catch블록에서 처리됩니다.

catch 블록의 파라미터('const char* _exception)는 throw블록에서 발생된 예외와 같은 타입이어야 합니다.

 

여러 개의 catch 블록을 설정하아ㅕ 다양한 유형의 예외를 처리할 수 있습니다.

예를 들어

try
{
	// 예외를 발생시킬 수 있는 코드
    throw "예외 처리";
}
catch(int _exception)
{
	std::cerr << "int : " << _exception << std::endl;
}
catch(const char* _exception)
{
	std::cerr << "char : " << _exception << std::endl;
}

위 코드에서 첫 번째 catch 블록은 정수 타입의 예외를 처리하고, 두번째 catch 블록은 문자열 타입의 예외를 처리합니다.

 

'catch(...)'문을 사용하면 모든 유형의 예외를 처리할 수 있습니다. 그러나 이것은 일반적으로 마지막 수단으로 사용되어야 합니다. 왜냐하면 그렇게 되면 프로그램은 특정 예외의 세부 정보를 알 수 없게 되기 때문입니다.

 

 

사용자 정의 예외

C++에서는 사용자 정의 예외를 만들어서 더 복잡한 예외 처리 시나리오를 구현할 수 있습니다.

사용자 정의 예외를 만들려면, 일반적으로 'std::exception'클래스를 상속받는 새 클래스를 만듭니다.

class MyException : public std::exception
{
public:
	const char* what() const throw()
    {
    	return "MyException occurred";
    }
};

try
{
	throw MyException();
}
catch(MyException& _e)
{
	std::cerr << "Error: " << _e.what() << std::endl;
}
catch(...)
{
	std::cerr << "Unknown exception caught" << std::endl;
}

이 코드에서, MyException 클래스는 사용자 정의 예외를 정의하는데 사용됩니다.

이 클래스는 std::exception 클래스를 상속박고, what()함수를 재정의(override)하여 예외 메시지를 반환합니다. 이 예외는

throw MyException(); 라인에서 발생시키고, catch(MyException& _e) 블록에서 처리됩니다.

반응형

댓글()