๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Java

[Java] Checked Exception๊ณผ UnChecked Exception

by ์•ˆ์ฃผํ˜• 2022. 12. 18.

์„œ๋ก 

์ตœ๊ทผ์— ์ž๋ฐ”์—์„œ Checked Exception๊ณผ Unchecked Exception์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ด๋ƒ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜์—ˆ๋Š”๋ฐ, ์ „ํ˜€ ๋ชฐ๋ž์–ด์„œ ์ •๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

"RuntimeException์„ ์ƒ์†ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” Checked Exception, ์ƒ์†ํ•œ ํด๋ž˜์Šค๋Š” Unchecked Exception"

 

๋ชฉ์ฐจ

  1. Error์™€ Exception ์ฐจ์ด
  2. ์˜ˆ์™ธ ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋„
  3. ์™œ RuntimeException์„ ์ƒ์†ํ•˜๋ฉด UnChecked Exception์ผ๊นŒ?

 

Error์™€ Exception ์ฐจ์ด

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘ ์–ด๋–ค ์›์ธ์— ์˜ํ•ด์„œ ์˜ค์ž‘๋™์„ ํ•˜๊ฑฐ๋‚˜ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๋Š” ์›์ธ์„ ํ”„๋กœ๊ทธ๋žจ ์—๋Ÿฌ ๋˜๋Š” ์˜ค๋ฅ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒ ์‹œ์ ์— ๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ธ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. ์ปดํŒŒ์ผ ์—๋Ÿฌ: ์ปดํŒŒ์ผ ์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ
  2. ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ: ์‹คํ–‰ ์‹œ์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ
  3. ๋…ผ๋ฆฌ์  ์—๋Ÿฌ: ์‹คํ–‰์€ ๋˜์ง€๋งŒ, ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ

๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ปดํŒŒ์ผ ์—๋Ÿฌ๋Š” ์ปดํŒŒ์ผํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ด๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ๋„์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ์—๋Ÿฌ๋Š” ์ปดํŒŒ์ผ๋„ ์ž˜๋˜๊ณ  ์‹คํ–‰๋„ ์ž˜๋˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ex) ์ฐฝ๊ณ ์˜ ์žฌ๊ณ ๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋˜๊ฑฐ๋‚˜, ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋น„ํ–‰๊ธฐ๊ฐ€ ์ด์•Œ์„ ๋งž์•„๋„ ์ฃฝ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

์—ฌ๊ธฐ์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ์— ์ง‘์ค‘ํ•˜์‹œ๋ฉด ๋˜๋Š”๋ฐ, ์ž๋ฐ”์—์„œ๋Š” ์‹คํ–‰ ์‹œ(runtime) ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๋ฅผ '์—๋Ÿฌ(Error)'์™€ '์˜ˆ์™ธ(Exception)'๋กœ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ์™ธ(Exception): ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ฐธ์กฐ๋œ ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ๋“ฑ ์ •์ƒ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ์–ด๊ธ‹๋‚˜๋Š” ๊ฒƒ
  • ์—๋Ÿฌ(Error): OutOfMemoryError, StackOverflowError์™€ ๊ฐ™์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ๋ง‰์„ ๊ธธ์ด ์—†์ง€๋งŒ, ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด ๋†“์Œ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๊ณ„์ธต ๊ตฌ์กฐ

์˜ˆ์™ธ ํด๋ž˜์Šค ๊ณ„์ธต๋„

๋ชจ๋“  ํด๋ž˜์Šค์˜ ์กฐ์ƒ์€ Object ํด๋ž˜์Šค์ด๋ฏ€๋กœ Exception๊ณผ Errorํด๋ž˜์Šค ์—ญ์‹œ Object ํด๋ž˜์Šค์˜ ์ž์†๋“ค์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜ˆ์™ธ์˜ ์ตœ๊ณ  ์กฐ์ƒ์€ Exceptionํด๋ž˜์Šค์ด๋ฉฐ, ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ๋ถ„ ์ง“์Šต๋‹ˆ๋‹ค.

  • RuntimeException์˜ ์ž์†๋“ค์„ ์ œ์™ธํ•œ Exception๊ณผ ๊ทธ ์ž์†๋“ค
  • RuntimeExceptionํด๋ž˜์Šค์™€ ๊ทธ ์ž์†๋“ค

 

์™œ RuntimeException์„ ์ƒ์†ํ•˜๋ฉด UnChecked Exception์ผ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ์™œ RuntimeException์˜ ์ƒ์† ์œ ๋ฌด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š”์ง€ ๊ถ๊ธˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ฝ”๋“œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

class Exception {
	public static void main(String[] args) {
		throw new Exception();
	}
}

๋จผ์ € ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ํ›„์— ์ปดํŒŒ์ผํ•˜๋ฉด, java: unreported exception java.lang.Exception; must be caught or declared to be thrown ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ปดํŒŒ์ผ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์•ผ ํ•  ๋ถ€๋ถ„์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์œ„์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋„์—์„œ ์ฒซ๋ฒˆ์งธ์— ํ•ด๋‹นํ•˜๋Š” 'RuntimeException์˜ ์ž์†๋“ค์„ ์ œ์™ธํ•œ Exception๊ณผ ๊ทธ ์ž์†๋“ค'์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ์กฐ์ฐจ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ์„ ์œ„ํ•ด์„œ๋Š” try-catch๋ฅผ ํ†ตํ•ด์„œ Exception์„ ํ•ธ๋“ค๋งํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

class Exception {
	public static void main(String[] args) {
		throw new RuntimeException();
	}
}

ํ•˜์ง€๋งŒ ์œ„ ์ฝ”๋“œ๋Š” ์–ด๋–จ๊นŒ์š”? ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด์ „์˜ ์ฝ”๋“œ์™€๋Š” ๋‹ฌ๋ฆฌ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹คํ–‰ํ•˜๋ฉด, Exception in thread "main" java.lang.RuntimeExceptionat test.Exception.main ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ๋น„์ •์ƒ์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๊ฐ€ ๋ช…๋ฐฑํžˆ RuntimeException์„ ๋ฐœ์ƒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์ด์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” RuntimeExceptionํด๋ž˜์Šค์™€ ๊ทธ ์ž์†๋“ค์— ํ•ด๋‹นํ•˜๋Š” ์˜ˆ์™ธ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์— ์˜ํ•œ ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Unchecked Excetpion์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€