wrapping_checked_exception_into_unchecked_exception

Checked Exception์„ Unchecked Exception์œผ๋กœ throwํ•˜์ž

Checked Exception์€ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ, try/catch๋ฌธ์œผ๋กœ ๋ณต๊ตฌ ์ „๋žต์„ ์„ธ์šด๋‹ค.

ํ•˜์ง€๋งŒ ๋ช…ํ™•ํ•œ ๋ณต๊ตฌ ์ „๋žต์ด ์—†์„ ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ํ•˜๊ธฐ ์œ„ํ•ด์„œ

Checked Exception์„ Unchecked Exception์œผ๋กœ throwํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ํ•œ๋‹คโ• ์ด์œ ๋ฅผ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž

Checked Exception๋Š” try/catch๋ฌธ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต๊ตฌ ์ „๋žต์„ ๋งˆ๋ จํ•ด๋‘”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ๋ณต๊ตฌ ์ „๋žต์„ ๋งˆ๋ จํ•ด๋†“์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค. Checked Exception์ด์ง€๋งŒ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ(unrecoverable conditions) try/catch๋ฌธ์—์„œ catch๋ฌธ์„ ๋น„์›Œ๋‘๊ธฐ๋„ ํ•œ๋‹ค. ํ˜น์€ ๊ตณ์ด ๋น„์›Œ๋‘” catch๋ฌธ์ด ์•„๋‹ˆ๋”๋ผ๋„, ์˜ˆ์™ธ๊ฐ€ ์žกํ˜€๋„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด๊ณ ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ ์‹คํ–‰๋œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค(Execution of the program continues after the catch block, as if nothing had happened). ์ฐธ๊ณ  ๋งํฌ

์ด๋ ‡๊ฒŒ try/catch๋ฌธ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด๊ณ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์–ด๋ ต๋‹ค. (๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ณ , ๋ณด๊ณ ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ฒดํฌ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ..) ์ด๋•Œ Checked Exception๋ฅผ Unchecked Exception๋กœ throwํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ณด๊ณ ๋˜์–ด ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ช…ํ™•ํ•œ ๋ณต๊ตฌ ์ „๋žต์„ ์„ธ์šธ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, Unchecked Exception์œผ๋กœ throwํ•ด์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ช…ํ™•ํ•œ ์˜ˆ์™ธ ์ •๋ณด๋ฅผ ์ฃผ์–ด ํ•ด๊ฒฐํ•˜์ž.

๋‹ค์Œ์˜ ์˜ˆ๋Š” Checked Exception์ธ SQLException์ด ๋ฐœ์ƒํ•œ ์ƒํ™ฉ์ด๋‹ค. SQLException์ด ๋ฐœ์ƒํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋กœ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ catch๋ฌธ์„ ๋น„์›Œ๋‘๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ์ธ์ง€ ์•Œ์ง€ ๋ชปํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์ •์ƒ ์ง„ํ–‰๋˜๋ฏ€๋กœ ์œ„ํ—˜ํ•˜๋‹ค.

// ๋ณต๊ตฌ ์ „๋žต์ด ์—†์–ด catch๋ฌธ์„ ๋น„์›Œ๋‘” ์ƒํ™ฉ
public void dataAccessCode(){
  try{
      ..some code that throws SQLException
  }catch(SQLException ex){
      ex.printStacktrace();
  }
}

๋”ฐ๋ผ์„œ ์•„๋ž˜์ฒ˜๋Ÿผ Unchecked Exception์œผ๋กœ throw ํ•ด์ฃผ์ž. ์•„๋ž˜ ์ฝ”๋“œ๋Š” SQLException์ด ๋ฐœ์ƒ์‹œ RuntimeException์œผ๋กœ throwํ•ด์ค€๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ๋Š” ๋ฉˆ์ถ”๊ณ , ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์–ด๋–ค ์˜ˆ์™ธ์ธ์ง€ ๋ณด๊ณ ๋œ๋‹ค. ์ฆ‰, Unchecked Exception์œผ๋กœ ๋ฐ”๊พธ์–ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜ˆ์™ธ๋ฅผ ๋ณด๊ณ ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

// Unchecked Exception์œผ๋กœ throw ํ•ด์ค€ ์ƒํ™ฉ
public void dataAccessCode(){
   try{
       ..some code that throws SQLException
   }catch(SQLException ex){
       throw new RuntimeException(ex);
   }
}

โ‡’ ์˜ˆ์‹œ ์ฐธ๊ณ  ์—ฌ๊ธฐ์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ๊ณ„์ธต์œผ๋กœ ๋˜๋‹ค๋ฅธ Checked Exception์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹๋„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๊ฐ€ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ Unchecked Exception์œผ๋กœ throw ํ•ด์ฃผ์ž. ๋”ฐ๋ผ์„œ ์œ„ ๋ฐฉ์‹์ฒ˜๋Ÿผ RuntimeException ํ˜น์€ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ Unchecked Exception์œผ๋กœ throw ํ•ด์ฃผ์ž.

์ •๋ฆฌํ•˜๋ฉด

๋ช…ํ™•ํ•œ ๋ณต๊ตฌ ์ „๋žต์„ ์„ธ์šธ์ˆ˜ ์žˆ๋‹ค๋ฉด Checked Exception์„ ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋ณด๊ณ  ํ•˜๋Š” ๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค. Unchecked Exception์œผ๋กœ throwํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋ณด๊ณ ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

Reference

Last updated