개념

예외

잘못된 코드, 부정확한 데이터, 예외적인 상황에 의해 발생하는 오류

인터럽트

문제가 발생한 경우라도 업무 처리가 계속될 수 있도록 하는 기능

int main()
{
	int pizza_slices = 0;
	int persons = 0;
	int slices_per_person = 0;

	cout << "피자 조각수를 입력하시오:";
	cin >> pizza_slices;
	cout << "사람 수를 입력하시오:";
	cin >> persons;
	slices_per_person = pizza_slices / persons;
	cout << "한 사람당 피자는" << slices_per_person << "입니다." << endl;

	return 0;
}

<aside> ➡️ 피자 조각수를 입력하시오: 12 사람 수를 입력하시오: 0 → 에러 발생

</aside>

전통적으로 오류를 처리하는 방식

if (pizza_slices < 0) {
		cout << "피자 조각이 음수임";
} else if (pizza_slices == 0) {
		cout << "피자 조각이 0임"
	else {
		if (persons == 0) {
			cout << "사람이 0명입니다." << endl;
		} else if (persons < 0) {
			cout << "사람이 음수입니다." << endl;
		} else {
			slices_per_person = pizza_slices / persons;
			cout << "한 사람당 피자는" << slices_per_person << "입니다." << endl;
		}
	}
}

예외처리

try {
	// 예외가 발생할 수 있는 블록
	if(예외가 발생하면)
		throw exception;
} catch (예외타입  매개변수) { // throw는 예외를 던진다.
	// 예외가 발생하면 처리합니다.
}

try 블록은 예외가 발생할 수 있는 위험한 코드이다. catch 블록은 예외를 처리하는 코드이다.

int main()
{
	int pizza_slice = 0;
	int persons = -1;
	int slices_per_person = 0;

	try {
		cout << "피자 조각수를 입력하시오:";
		cin >> pizza_slices;
		cout << "사람수를 입력하시오:";
		cin >> persons;
		if(persons == 0)           // 사람이 0명이면
			throw persons;           // 오류라고 persons 값을 던질겁니다.
		slices_per_person = pizza/persons;
		cout << "한 사람당 피자는" << slices_per_person << "입니다." << endl;
	}
	catch (int e) {              // 오류라고 신호가 오면 아래를 실행합니다.
		cout << "사람이" << e << "명 입니다." << endl;
	}
	return 0;
}

<aside> ➡️ 피자 조각수를 입력하시오 : 12 사람 수를 입력하시오 : 0 사람이 0명 입니다.

</aside>

예외타입이 일치하는 것만 처리한다.

try {
	int person = 0;
	if (person == 0)
		throw person;        // int 형인데요.
}
catch(char e) {          // char 형 예외만 처리해요.
	cout << "사람이" << e << "명 입니다." << endl;
}