๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+59] ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ5 (์˜ˆ์™ธ)

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 12. 13.

 

 

๊ตญ๋น„์ง€์› D+59

-  ์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ5 -

 


 

์˜ˆ์™ธ๋ž€? (Exception)

- ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์‹œ ์‚ฌ์šฉ์ž ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Œ€์‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋น„์ •์ƒ์  ์ƒํ™ฉ

- ์ฝ”๋“œ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ Run-time์— ๋ฐœ์ƒํ•˜๋Š” ๋น„์ •์ƒ์  ์ƒํ™ฉ

- ์˜ˆ์™ธ๋Š” H/W์  ์ฒ˜๋ฆฌ๋ฐฉ์‹๊ณผ S/W์  ์ฒ˜๋ฆฌ๋ฐฉ์‹์ด ์žˆ์œผ๋‚˜ JVM์˜ ๊ฒฝ์šฐ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”ํ•œ ์ข…๋ฃŒ ์ฒ˜๋ฆฌํ•œ๋‹ค. => ๋”์ด์ƒ JAVA์‹คํ–‰ ์ฝ”๋“œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜

- java.lang.ArithmeticException : ์ˆ˜ํ•™ ์—ฐ์‚ฐ์˜ ์˜ˆ์™ธ

- java.util.InputMismatchException : Scanner๋ฅผ ํ†ตํ•œ ๊ฐ’์˜ ์ž…๋ ฅ ์˜ˆ์™ธ

- ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ์— ๋”ฐ๋ฅธ ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ผ์„์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ JVM์€ ๋ฌด๊ฒฐ์„ฑ์ด ์ง€์ผฐ๋‹ค๊ณ  ๊ฐ„์ฃผ๋œ๋‹ค.

 

 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

try-catch ๋ฌธ

try 
{
	// ์˜ˆ์™ธ ๋ฐœ์ƒ ์˜ˆ์ƒ ์˜์—ญ
}

catch (Exception name)
{
	// ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์˜์—ญ
}

// ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ดํ›„ ์‹คํ–‰์ง€์ 

- ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•์œผ๋กœ try์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ catch์˜์—ญ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

- ์ด๋•Œ ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฒ ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐœ์ƒ๋œ ์˜ˆ์™ธ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

 

finally

try
{
	...
}

catch(Exception e)
{
	...
}

finally
{
	... // try๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ฌด์กฐ๊ฑด ์‹คํ–‰
}

- try๊ตฌ๋ฌธ์ด ์‹คํ–‰๋œ ๊ฒฝ์šฐ, ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰ํ•  ๊ตฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค์›Œ๋“œ ์ด๋‹ค.

 

 

 ์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ๋ฒ”์œ„

์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ๋ฒ”์œ„

์˜ˆ์™ธ์ฒ˜๋ฆฌ์˜ ๋ฒ”์œ„๋Š” try๋กœ ๋ธ”๋ก์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. 

์ด๋•Œ try๋ธ”๋ก์˜ ๋ฒ”์œ„๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

try๋ธ”๋ก์˜ ๋ฒ”์œ„
1 > ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ ๋ฒ”์œ„
2 > ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ฝ”๋“œ์˜ ๋ฒ”์œ„

๋งŒ์•ฝ try๋กœ ๋‹ค ๋ฌถ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋ฉด JVM์˜ ๋ช…๋ น์ด ๋น„๋Œ€ํ•ด์ง€๊ณ  ๋ฒ„๊ฑฐ์›Œ์ ธ์„œ ๋Š๋ ค์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ์ตœ์†Œํ•œ์œผ๋กœ ๋ถ‚์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ๋„ˆ๋ฌด ์ตœ์†Œํ•œ์ด ์•„๋‹Œ C์—๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ๋„ ๊ณ ๋ คํ•ด์ฃผ์–ด์„œ ๋ฌถ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

์—ฐ์‚ฐ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌถ๋Š” ๊ฑฐ์ง€ ์˜ˆ์™ธ๋ณ„๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

๋‘˜ ์ด์ƒ์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ

ํ•˜๋‚˜์˜ try๋ธ”๋ก์—์„œ ๋งŒ์•ฝ ๋‘๊ฐœ ์ด์ƒ์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ์— ๋Œ€ํ•œ catch๋ฌธ์„ ์ž‘์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.

 

 ์˜ˆ์™ธ ๋˜์ง€๊ธฐ

Throwable ํด๋ž˜์Šค

- ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๋ชจ๋“  ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํด๋ž˜์Šค๋Š” Throwable ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.

- getMessage(), printStackTrace() ๋“ฑ์˜ ๊ธฐ๋Šฅ๋„ Throwable์˜ ๋ฉ”์†Œ๋“œ ์ด๋‹ค.

- Throwable๋กœ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ• ๋•Œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์ƒ๋‹จ์— Throwable๋กœ ์ฒ˜๋ฆฌํ•ด์ค„ ๊ฒฝ์šฐ ๋’ค์—์˜ค๋Š” catch๋ฌธ์ด ๋ฐ๋“œ์ฝ”๋“œ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฌ๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ์‚ฌ์šฉ์„ ํ”ผํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

 

๋‹ค์–‘ํ•œ ์˜ˆ์™ธ ํด๋ž˜์Šค

- ArrayIndexOutOfBounds : ๋ฐฐ์—ด์˜ ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค ์ ‘๊ทผ

- ClassCastException : ํ—ˆ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ˜•๋ณ€ํ™˜์„ ๊ฐ•์ œ๋กœ ์ง„ํ–‰

- NullPointerException : Null์ด ์ €์žฅ๋œ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ์ ‘๊ทผ

 

 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์‹ฌํ™”

์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๋ถ„๋ฅ˜

Error

- ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค

- ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„ํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๋‹ค.

- ์ž„์˜์˜ ์ƒ์†์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

- VirtualMachineError, IOError

 

RuntimeException

- ์ผ๋ฐ˜์ ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค์ด๋‹ค.

 

Exception

- ๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค

-  ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ง€ ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

 

java.io.IOException

- try๋ฌธ์„ ์ง€์›Œ๋ณด๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒˆ์˜ค๋””๋Š”๋ฐ ์ด๋Š” IOException์€ ๋ฐ˜๋“œ๋ฆฌ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” Exception์—์„œ ์ƒ์†๋œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ try๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

- ๋งŒ์•ฝ main์ด ์•„๋‹Œ ๋ฉ”์†Œ๋“œ ๋‚ด์—์„œ IOException์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ throws ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค.

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ

- Exception์„ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์„ฑ๋Šฅ์ €ํ•˜, ๊ฐ€๋…์„ฑ ์ €ํ•˜๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

try-with-resources

์ผ๋ฐ˜์ ์œผ๋กœ file๊ณผ ๊ฐ™์€ resource๋Š” Exception์ฒ˜๋ฆฌ๋ฅผ ๋™๋ฐ˜ํ•œ๋‹ค.

์ด๋กœ์ธํ•ด finally๊ตฌ๋ฌธ์—์„œ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๋Š” ๋‹จ์ ์ด ๋ฐœ์ƒ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด try-with-resources ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€