๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

045 | Checked / Unchecked / Customised Exception ๋ณธ๋ฌธ

SEB/TIL

045 | Checked / Unchecked / Customised Exception

kexon 2022. 8. 25. 22:10

๐ŸŽˆChecked Exception

  • ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ(catch) ์ฒดํฌํ•œ ํ›„ ๋ฐ˜๋“œ์‹œ ์—๋Ÿฌ์ฒ˜๋ฆฌ(try~catch)๋ฅผ ํ•ด์•ผํ•˜๋Š” ์˜ˆ์™ธ์ด๋‹ค.
  • Exception ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค (Exception ์ƒ์†๋ฐ›์Œ)
  • ClassNotFoundException, FileNotFoundException, SQLException, …

๐ŸŽˆUnchecked Exception

  • ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ(catch) ํ•ด๋‹น ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ(try~catch)๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ์˜ˆ์™ธ์ด๋‹ค.
  • RuntimeException์˜ ํ•˜์œ„ ํด๋ž˜์Šค (RuntimeException ์ƒ์†๋ฐ›์Œ)
  • ์ฃผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ์ž‘์„ฑํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋“ค์€ ๋ชจ๋‘ RuntimeException์„ ์ƒ์†ํ•œ ์˜ˆ์™ธ๋“ค์ด๋‹ค.
  • NullPointException, ArrayIndexOutOfBoundsException, …

๐ŸŽˆCustom Exception

  • ๊ธฐ์กด ์˜ˆ์™ธ ํด๋ž˜์Šค ์™ธ์— RuntimeException / Exception์„ ์ƒ์†ํ•ด์„œ ์ƒˆ๋กœ์šด ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ๋กœ ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๊ณ , ๋˜์ ธ์ง„ ์˜ˆ์™ธ๋Š” Exception Advice์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽˆException Handling

  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€๋น„ํ•ด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์ฃผ๋Š” ๊ฒƒ 

๐Ÿงฉ  throw / catch on purpose from programmer

  • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์™€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๋™์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ์ฒ˜๋ฆฌ
    • ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์ชฝ์—์„œ ์˜ˆ์™ธ๋ฅผ ์˜๋„์ ์œผ๋กœ ๋˜์ ธ์„œ ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์กฐํšŒํ•˜๋ ค๋Š” ๋ฆฌ์†Œ์Šค(์ž์›, Resource)๊ฐ€ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์— ์—†๋Š” ๊ฒฝ์šฐ
    • ์˜๋„์ ์œผ๋กœ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๋ฅผ ์ „์†กํ•ด์„œ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงฉ  throw / catch on purpose

  • throw ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์™ธ๋ฅผ ๋ฉ”์„œ๋“œ ๋ฐ”๊นฅ์œผ๋กœ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜์ ธ์ง„ ์˜ˆ์™ธ๋Š” ๋ฉ”์„œ๋“œ ๋ฐ”๊นฅ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ง€์ ์œผ๋กœ ๋˜์ ธ์ง„๋‹ค. 
  • ์˜ˆ๋ฅผ ๋“ค์–ด Service Layer์—์„œ ๋˜์ง„ ์˜ˆ์™ธ๋Š” API Layer์˜ Handler Method๋ฅผ ์ด์šฉ ์ค‘์ธ Controller๊ฐ€ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ’ฌ about Business Exception

ํ•™์Šต ์ฝ˜ํ…์ธ ์— ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์˜ˆ์™ธ์˜ ๋œป์ด ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์•„์„œ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ ๊ทธ๋Ÿฐ๊ฑด ์—†๋‹ค๊ณ  ... ??

์ž๋ฐ”์—์„œ ์˜ˆ์™ธ๋Š” Checked(inherited from Exception) / Unchecked(inherited from RuntimeException) ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
๊ตฌ๊ธ€๋งํ•œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅด๋ฉด '๋น„์ฆˆ๋‹ˆ์Šค ์˜ˆ์™ธ'๋ผ๋Š” ์šฉ์–ด๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ๋ฐ, ๋‚ด๋ถ€ API๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ๋น„์ฆˆ๋‹ˆ์Šค ์˜ˆ์™ธ๋กœ ํฌ์žฅํ•˜๊ฑฐ๋‚˜, ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ ์ž์ฒด ์ œ์ž‘ํ•˜๋Š” '๋น„์ฆˆ๋‹ˆ์Šค'๋ผ๋Š” ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜. ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค!

'SEB > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

052 | Transaction  (0) 2022.09.05
046 | Spring Data JDBC  (0) 2022.08.26
044 | Exception Handling in Spring MVC  (0) 2022.08.24
043 | Layer interconnect & Class Mapping  (0) 2022.08.23
042 | DTO ์œ ํšจ์„ฑ ๊ฒ€์ฆ  (0) 2022.08.23
Comments