[Java] Exception

Java์—์„œ Exception์˜ ์ข…๋ฅ˜ Checked Exception, Unchecked Exception(Runtime Exception)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  Exception Handling์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž!

1. ์—๋Ÿฌ(Error)๋ž‘ ์˜ˆ์™ธ(Exception)์˜ ์ฐจ์ด?

์—๋Ÿฌ๋Š” ์‹œ์Šคํ…œ์— ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์ƒ๊ฒผ์„๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ฌ๊ฐํ•œ ์ˆ˜์ค€์˜ ์˜ค๋ฅ˜์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ์ด๋‹ค. ๋ฐ˜๋ฉด์— ์˜ˆ์™ธ(Exception)๋Š” ๋ฐœ์ƒํ•  ์ƒํ™ฉ์„ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Exception์—๋Š” CheckedException๊ณผ UnceckedException์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

2. Throwable ํด๋ž˜์Šค ๊ณ„์ธต๊ตฌ์กฐ

Image result for java throwable hierarchy

Throwable ํด๋ž˜์Šค๋Š” Error ํด๋ž˜์Šค์™€ Exception ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๊ณ , Throwable์€ Object ํด๋ž˜์Šค์˜ ์ž์†์ด๋‹ค. Exception์€ CheckedException ๊ณผUncheckedException(RuntimeException)์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

3. Checked Exception๊ณผ Unchecked Exception ์ฐจ์ด

ย  checked Unchecked(Runtime)
์ฒ˜๋ฆฌ์—ฌ๋ถ€ ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ
(try-catch, throw exception)
์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ ํ•˜์ง€ ์•Š๋Š”๋‹ค
ํ™•์ธ์‹œ์  ์ปดํŒŒ์ผ ๋Ÿฐํƒ€์ž…
์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋กค๋ฐฑ X ๋กค๋ฐฑO
Example Exception์˜ ์ƒ์†๋ฐ›๋Š” ํ•˜์œ„ ํด๋ž˜์Šค ์ค‘ RuntimeException์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ˆ์™ธ
- IOException
- SQLException
RuntimeException ํ•˜์œ„ ์˜ˆ์™ธ
- NullPointerException
-IllegalArgumentException
-IndexOutOfBoundException
- SystemException

๊ฐ€์žฅ ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์€ โ€œ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€โ€ CheckedException์€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ try/catch ๋‚˜ throw๋กœ ๋˜์ ธ์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๋ฐ˜๋ฉด์— UncheckedException์€ ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์ด ์˜ˆ์™ธ๋Š” ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ๋ฐœ์ž์˜ ๋ถ€์ฃผ์˜์— ์˜ํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

4. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•

  1. ์˜ˆ์™ธ ๋ณต๊ตฌ: ๋‹ค๋ฅธ ์ž‘์—… ํ๋ฆ„์œผ๋กœ ์œ ๋„
  2. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํšŒํ”ผ: ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ throw

    public void method() throws IOException {
    	// ๊ตฌํ˜„๋กœ์ง
    }
    

    ๋น„๊ต์  ๋‹จ์ˆœํ•˜์ง€๋งŒ, ์‹ ์ค‘ํ•ด์•ผํ•˜๋Š” ๋กœ์ง. ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ธฐ ๋•Œ๋ฌธ์—, ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ๋‹ค์‹œ ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์•ผํ•˜๊ฑฐ๋‚˜, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์ด ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ํ™•์‹ ์ด ์žˆ์„๋•Œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  3. ์˜ˆ์™ธ ์ „ํ™˜: ๋ช…ํ™•ํ•œ ์˜๋ฏธ์˜ ์˜ˆ์™ธ๋กœ ์ „ํ™˜ ํ›„ throw

    catch (SQLException e){
      ...
        throw DuplicatedUserIdException();
    }
    

    ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์ด๋‹ค. ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ข€๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด checkException ์ค‘ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๊ฐ€ ์žกํ˜”๋‹ค๋ฉด ์ด๋ฅผ UncheckedException์œผ๋กœ ์ „ํ™˜ํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ ๋งˆ๋‹ค(๋‹ค๋ฅธ ๊ณ„์ธต)์—์„œ ์ผ์ผ์ด ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ด€ ํฌ์ŠคํŠธ