Introduction
01. try, catch, throw 문으로 예외 처리 [Practice 04-01-01]
try : 예외가 발생할 수 있는 코드 블록을 중괄호 { }로 감싸 준다.
throw : 예외를 catch 블록으로 던진다.
catch : throw로 던진 예외를 받아서 처리한다.
출력 결과, if문 안에서 발생한 예외를 throw가 블록 밖이 catch에 전달한다.
또한, 정수 1을 입력받았을 때의 출력 결과를 보면 throw 1 이전 메시지만 나오고 이후 메시지는 나오지 않는다. 이것으로 throw 이후의 코드는 무시되고 try 구문을 빠져나온다는 것을 확인할 수 있다. 즉, try 블록에서 차례로 실행되다가 예외가 발생하면 이후 구문은 실행되지 않는다.
<aside> ❗
cin에서 정수를 입력받는데 문자열을 입력한다면, 0을 할당하게 된다.
</aside>
assert를 이용해 프로그램의 특정 지점에서 true로 예상되는 조건을 지정한다. 만약 지정한 조건이 true가 아니면 프로그램 실행이 중단되며, 비주얼 스튜디오에서는 출력 결과( 오 )의 모습처럼 어설션 실패 대화상자가 나타나 어떤 문제가 발생했는지를 알려준다.
출력 결과
디버그 모드와 릴리즈 모드
<aside> 💡
즉, 개발할 때는 주로 디버그 모드를 사용하여 버그를 신속하게 찾아내고, 배포할 때는 릴리즈 모드로 컴파일하여 최적화된 실행 속도와 작은 실행 파일을 만든다.
</aside>
02. 예외 처리 생략과 실패 대응
예외 처리 메커니즘도 때로는 예외를 처리하지 못할 수 있다. 이번에는 noexcept와 set_terminate를 활용해 예외 처리와 예외 처리 실패에 대응하고 프로그램의 안정성과 신뢰성을 높이는 방법을 알아보겠다.
**함수가 예외를 던지지 않음을 명시**
int func() noexcept {
//실행 코드
}
효과 :
컴파일러가 최적화를 수행할 수 있으며, 예외 처리에 대한 오버헤드를 줄일 수 있습니다.
**종료 처리 함수 설정하기**
set_terminate(종료_처리_함수);
![출력 결과 >> myterminate called, 강제 종료 전 종료 처리 함수가 호출되었다.
<cstdlib> 헤더에 정의된 exit함수를 사용하였다. exit함수에 0을 전달하면 프로그램을 정상으로, -1을 전달하면 비정상으로 종료한다.](https://prod-files-secure.s3.us-west-2.amazonaws.com/c222b6ef-3c6d-41f4-af84-d26c72ffdcd7/df4c4200-fb6e-4ff6-aff0-38c616ab815f/image.png)
출력 결과 >> myterminate called, 강제 종료 전 종료 처리 함수가 호출되었다.
<cstdlib> 헤더에 정의된 exit함수를 사용하였다. exit함수에 0을 전달하면 프로그램을 정상으로, -1을 전달하면 비정상으로 종료한다.
03. 단원 마무리 문제
try, catch, throw 문 이해하기