일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- GPT-4
- LG
- deep learning
- 분류
- 해커톤
- 머신러닝
- LG Aimers
- 회귀
- Machine Learning
- Classification
- LLM
- LG Aimers 4th
- PCA
- 티스토리챌린지
- AI
- 지도학습
- supervised learning
- 오블완
- OpenAI
- ChatGPT
- regression
- 딥러닝
- gpt
Archives
- Today
- Total
SYDev
C++ Chapter 15-2 : C++의 예외처리 메커니즘 본문
try, catch, throw의 이해
예외처리 메커니즘과 관련한 키워드는 다음 세 가지이다.
- try
- catch
- throw
try 블록
try 블록은 예외발생에 대한 검사의 범위를 지정
try
{
//예외발생 예상지역
}
catch 블록
catch 블록은 try 블록에서 발생한 예외를 처리하는 코드가 담기는 영역
catch(처리할 예외의 종류 명시)
{
//예외처리 코드의 삽입
}
try 블록과 catch 블록
catch 블록은 try 블록의 뒤에 이어서 등장, try와 catch는 하나의 문장이기 때문에 반드시 이어서 등장해야 한다. 중간에 다른 문장이 삽입되면 compile error!
try
{
//예외발생 예상지역
}
cout<<"Simple Message"<<endl; //compile error!
catch(처리할 예외의 종류 명시)
{
//예외처리 코드의 삽입
}
throw
키워드 throw는 예외가 발생했음을 알리는 문장의 구성에 사용된다.
throw expn; //expn은 예외상황에 대한 정보를 담은, 의미 있는 데이터. (변수, 상수 그리고 객체 등 표현 가능한 모든 데이터가 될 수 있음)
예외처리 메커니즘의 적용
지난 chpater에서 나왔던 예제에 C++ 예외처리 문법을 적용해보자.
#include <iostream>
using namespace std;
int main(void)
{
int num1, num2;
cout<<"두 개의 숫자 입력: ";
cin>>num1>>num2;
try
{
if(num2==0)
throw num2;
cout << "나눗셈의 몫: " << num1 / num2 << endl;
cout << "나눗셈의 나머지: " << num1 % num2 << endl;
}
catch(int expn) //throw절에 의해 던져진 예외 데이터 자료형과 catch 블록의 매개변수 자료형은 일치해야 함
{
cout<<"제수는 "<<expn<<"이 될 수 없습니다."<<endl;
cout<<"프로그램을 다시 실행하세요."<<endl;
}
cout<<"end of main"<<endl;
return 0;
}
예외가 발생하지 않는 경우 -> catch 블록을 건너뛰어 실행
두 개의 숫자 입력: 9
2
나눗셈의 몫: 4
나눗셈의 나머지: 1
end of main
예외가 발생한 경우 -> 예외가 발생한 지점 이후의 나머지 try 영역을 건너뛰어 실행
두 개의 숫자 입력: 7
0
제수는 0이 될 수 없습니다.
프로그램을 다시 실행하세요.
end of main
try 블록을 묶는 기준
try 블록은 예외가 발생할만한 영역만 묶는 게 아니라, 그와 관련된 모든 문장을 함께 묶어서 하나의 '일(work)'의 단위로 구성해야 한다.
try블록이 예제와 달리 다음과 같이 묶인 경우를 생각해보자.
try
{
if (num2 == 0)
throw num2;
}
catch (int expn) { . . . . }
cout << "나눗셈의 몫: " << num1 / num2 << endl;
cout << "나눗셈의 나머지: " << num1 % num2 << endl;
이 경우 발생한 예외를 인지하고, 이를 처리했음에도 실행되어서는 안 될 문장들이 실행된다.
참고자료
- 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12
'Programming Lang > C++' 카테고리의 다른 글
C++ Chapter 15-4 : 예외상황을 표현하는 예외 클래스의 설계 (0) | 2023.08.01 |
---|---|
C++ Chapter 15-3 : Stack Unwinding(스택 풀기) (0) | 2023.08.01 |
C++ Chapter 15-1 : 예외상황과 예외처리의 이해 (0) | 2023.08.01 |
C++ Chapter 14-4 : 템플릿과 static (2) | 2023.07.31 |
C++ Chapter 14-3 : 템플릿 인자 (0) | 2023.07.31 |