๐ŸฃC++ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•(try, catch, throw, invalid_argument)

Joosi_Coolยท2022๋…„ 9์›” 23์ผ
3

C++

๋ชฉ๋ก ๋ณด๊ธฐ
9/20
post-thumbnail

1. try

try
{
์˜ˆ์™ธ ๋ฐœ์ƒ์ง€์—ญ
}

try ์•ˆ์— ์ฝ”๋“œ ์•ˆ์—์„œ error๊ฐ€ ๋‚˜๋Š”์ง€ ํ™•์ธ. ๋งŒ์•ฝ์— error์ผ์‹œ

2. throw

throw๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
์ด๋•Œ ์ค‘์š”ํ•œ ์ ์ด throw์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
ex) throw(expn)

3. catch

catch( ๋ณ€์ˆ˜ ){
์˜ˆ์™ธ์ฒ˜๋ฆฌ ์‹œ ์‹œํ–‰ํ•  ์ฝ”๋“œ
}

catch์— ๊ฒฝ์šฐ๋Š” try ๋’ค์— ๊ผญ ์™€์•ผํ•œ๋‹ค. ๋˜ํ•œ catch๋Š” return type์ด ์—†๋Š” ํ•จ์ˆ˜ํ˜•ํƒœ์™€ ์œ ์‚ฌํ•˜๋‹ค.
ํฐ ํŠน์ง•์œผ๋กœ๋Š” catch(๋ณ€์ˆ˜)์— ์žˆ๋Š” ๋ณ€์ˆ˜์— throw ๋กœ ๋˜์ง„ ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ

#include<iostream>
using namespace std;


int main() {

	//๋‘๊ฐœ์˜ ์ˆซ์ž ์„ ์–ธ, ๋ฐ›๊ธฐ
	int num1, num2;
	cout << "๋‘ ๊ฐœ์˜ ์ˆซ์ž ์ž…๋ ฅ: ";
	cin >> num1 >> num2;

	//try๋ฌธ num2==0์ด๋ฉด num2๋ฅผ throwํ•จ.
	try {
		if (num2 == 0)
			throw num2;
		
		cout << "๋‚˜๋ˆ—์…ˆ์˜ ๋ชซ: " << num1 / num2 << endl;
		cout<<"๋‚˜๋ˆ—์…ˆ์˜ ๋‚˜๋จธ์ง€: "<< num1 % num2 << endl;
	}
	// throw ํ•œ num2๋ฅผ expn์œผ๋กœ ๋ฐ›์Œ.
	catch (int expn)
	{
		cout << "์ œ์ˆ˜๋Š” "<<expn<<"์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." << endl;
		cout << "ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”." << endl;
			
	}


	return 0;
}

invalid_argument

invalid_argument ๋Š” throw์—์„œ ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๊ธฐ ๋Œ€์‹ ์— ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ธฐ๋Šฅ์€ ๋น„์Šทํ•˜์ง€๋งŒ, ์ปดํ“จํ„ฐ์—๊ฒŒ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒผ๋‹ค๋Š”๊ฒƒ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, invalid_argument๋ฅผ ์ฐธ์กฐ๋กœ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

#include<iostream>
using namespace std;

void divide(int a, int b) {
	if (b != 0) {
		cout << "๋‚˜๋ˆ—์…ˆ์˜ ๋ชซ: ";
		cout << a / b << "\n";


		cout << "๋‚˜๋ˆ—์…ˆ์˜ ๋‚˜๋จธ์ง€: ";
		cout << a % b << "\n";
	}
	// 2. b = 0 ์ด๋ผ๋ฉด ์•„๋ž˜ ๊ฐ’์„ throw ํ•จ.
	throw invalid_argument("์ œ์ˆ˜๋Š” 0์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.\nํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.\n");
}

int main() {

	//์ •์ˆ˜ num1, num2 ์ƒ์„ฑ, ๊ฐ’ ๋ฐ›๊ธฐ
	int num1, num2;
	cout << "๋‘ ๊ฐœ์˜ ์ˆซ์ž ์ž…๋ ฅ: ";
	cin >> num1 >> num2;


	// 1. try(ํ•จ์ˆ˜์— ๋„ฃ์—ˆ์„๋•Œ ํ™•์ธ)
	try {
		divide(num1, num2);
	}
	// 3. throw๋ฅผ ๋˜์ ธ์ฃผ๋ฉด invalid_argument ๊ฐ’์„ e๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉฐ, ์ด๋ฅผ ์ถœ๋ ฅ
	catch(invalid_argument &e)
	{
		cerr << e.what();
	}


	return 0;
}
profile
์ง‘๋Œ์ด FE๊ฐœ๋ฐœ์ž์˜ ๋…ธํŠธ

0๊ฐœ์˜ ๋Œ“๊ธ€