본문 바로가기

교육 노트/C++ 심화강의

[C++ 때려잡기] C++ 심화강의 15 예외처리

예외처리는 예외 상황을 처리하는것이다.


a,b를 입력받고

a/b를하는 프로그램이다.


여기서 b가 0이라면 a/b를 할수없다

따라서

이런식으로 if문으로 예외처리를 해줘야 한다.


이렇게 간단한 예외는 if문으로 해줘도 프로그램만 잘동작하면 문제가 없긴하나..

예외상황이 많아지면 if문 지옥이 되버리고 각 if문에서도 처리해야될 내용이 많아지게된다.


1.try-catch

따라서 거의 대부분의 프로그래밍 언어는 예외처리를위한 특수한 구문 try-catch 구문을 지원한다.

구문이다.

ry구문은 예외처리가 동작할 구문이다.

catch 구문은 throw된 예외를 잡아서 처리하는 구문이다.

throw는 예외 객체를 던지는 구문이다.


위에는 0으로 나누려고 하면 int를 던지고 이를 캐치에서 받아서 처리하는 구문이다.


try구문에서 throw가발생하면 아래를 실행하지 않고 catch로 넘어간다.


여기서 객체를 던지다는것은 int형을 던지면 죄다 catch (int e)로 넘어간다.

저기서 다시 if문으로 구분해도 되기는하는데

일반적으로 예외상황마다 던질 예외 객체 클래스를 만든다

요런식으로


또한 C++ 표준 예외객체가 존재하여 그것들을 throw / catch 해서 쓸수도있다.


2. 스택 되감기

위의 코드로 try-catch를 했는데

아니 아무리봐도 걍 if문으로 검사해서 실행하는게 더 짧고 심플해보인다.

심지어 try-catch 해도 if문은 그대로 이다.


아까도 말했듯이..

이렇게 간단한 예외는 if문으로 해줘도 프로그램만 잘동작하면 문제가 없긴하나..

예외상황이 많아지면 if문 지옥이 되버리고 각 if문에서도 처리해야될 내용이 많아지게된다.


그리고 try-catch는 스택되감기라는것을 지원한다.

호출된 함수에서 발생한 예외를 호출한 함수에서 처리가능하다,





이런식으로 Fn()에서 예외가 throw가 되도 이를 main에서 처리할수있다.

이러한 기능을 스택되감기라고 한다.



예외처리를 통하여 예외부분과 처리부분이 분리가 명확해진다.

다만 스택 되감기, 객체 생성해서 던지기 등으로 걍 if문 처리보다 프로그램이 커지고 시간을 잡아먹으므로

적절히 사용해야한다.


728x90