์ž๋ฐ”์˜ ์ •์„ - ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(Exception handling)

๋ธ”๋กœ๊ทธ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค! ๐Ÿก’ integer.blog



์ž๋ฐ”์˜ ์ •์„(๋‚จ๊ถ์„ฑ ์ €) ํ•™์Šต๋‚ด์šฉ ์ •๋ฆฌ

1. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (Exception handling)

  • ์—๋Ÿฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(OutOfMemoryError)์ด๋‚˜ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(StackOverFlowError)์ฒ˜๋Ÿผ ์ผ๋‹จ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜
  • ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ˆ˜์Šต๋  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜

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

  • Object
    • Throwable
    • Exception
      • RuntimeException
      • ArithmeticException
      • ClassCastException
      • NullPointerException
      • IndexOutOfBoundException
      • IOException
    • Error
  • ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” Exception ํด๋ž˜์Šค์™€ ์ž์‹๋“ค๊ณผ RuntimeException ํด๋ž˜์Šค์™€ ์ž์‹๋“ค๋กœ ๋‚˜๋‰œ๋‹ค.
  • Exception ํด๋ž˜์Šค๋“ค : ์‚ฌ์šฉ์ž์˜ ์‹ค์ˆ˜์™€ ๊ฐ™์€ ์™ธ์ ์ธ ์š”์ธ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ
  • RuntimeException ํด๋ž˜์Šค๋“ค : ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ
  • ๋ชจ๋“  ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” Exception ํด๋ž˜์Šค์˜ ์ž์†์ด๋ฏ€๋กœ, catch๋ธ”๋Ÿญ์˜ ๊ด„ํ˜ธ()์— Exceptionํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ์–ด๋–ค ์ข…๋ฅ˜์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ด catch๋ธ”๋Ÿญ()์— ์˜ํ•ด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

3. printStackTrace()์™€ getMessage()

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋˜๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—๋Š” ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ, getMessage()์™€ printStackTrace()๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • printStackTrace() : ์˜ˆ์™ธ๋ฐœ์ƒ ๋‹น์‹œ์˜ ํ˜ธ์ถœ์Šคํƒ(Call Stack)์— ์žˆ์—ˆ๋˜ ๋ฉ”์„œ๋“œ์˜ ์ •๋ณด์™€ ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.
  • getMessage() : ๋ฐœ์ƒํ•œ ์˜ˆ์™ธํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ๋ฉ”์„ธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

4. ๋ฉ€ํ‹ฐ catch ๋ธ”๋Ÿญ

  • JDK1.7๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ catch๋ธ”๋Ÿญ์„ |๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜๋‚˜์˜ catch ๋ธ”๋Ÿญ์œผ๋กœ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.
    try {
    ...
    } catch (ExceptionA e)  {
        e.printStackTrace();
    } catch (ExceptionB e2) {
        e2.printStacktrace();
    }
  • ์ด try-catch ๋ฌธ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
    try {
    ...
    } catch (ExceptionA | ExceptionB e) {
        e.printStackTrace();
    }
  • ๋‹จ, ์˜ˆ์™ธํด๋ž˜์Šค๋“ค์ด ์กฐ์ƒ-์ž์† ๊ด€๊ณ„์— ์žˆ์œผ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.(๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋Š” ์ œ๊ฑฐํ•˜๋ผ๋Š” ์˜๋ฏธ์˜ ์—๋Ÿฌ)

5. ๋ฉ”์†Œ๋“œ์— ์˜ˆ์™ธ ์„ ์–ธ

  • ๋ฉ”์†Œ๋“œ์— ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•
    void method() throws Exception1, Exception2, ... ExceptionN {
    ...
    }
  • ๋ฉ”์†Œ๋“œ์˜ ์„ ์–ธ๋ถ€์— ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•จ์œผ๋กœ์จ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ๋ฉ”์†Œ๋“œ์˜ ์„ ์–ธ๋ถ€๋ฅผ ๋ณด์•˜์„ ๋•Œ, ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋– ํ•œ ์˜ˆ์™ธ๋“ค์ด ์ฒ˜๋ฆฌ๋˜์–ด์ ธ์•ผ ํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

6. finally ๋ธ”๋Ÿญ

  • finally ๋ธ”๋Ÿญ์€ try-catch๋ฌธ๊ณผ ํ•จ๊ป˜ ์˜ˆ์™ธ์˜ ๋ฐœ์ƒ์—ฌ๋ถ€์— ์ƒ๊ด€์—†์ด ์‹คํ–‰๋˜์–ด์•ผํ•  ์ฝ”๋“œ๋ฅผ ํฌํ•จ์‹œํ‚ฌ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • finally ๋ธ”๋Ÿญ์€ try-catch๋ฌธ์˜ ๋งจ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.
  • try ๋ธ”๋Ÿญ์—์„œ return๋ฌธ์ด ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋„ finally๋ธ”๋Ÿญ์˜ ๋ฌธ์žฅ๋“ค์ด ๋จผ์ € ์‹คํ–‰๋œ ํ›„์—, ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.