๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java

[ch.8] ์˜ˆ์™ธ์ฒ˜๋ฆฌ

by OR15A 2023. 11. 11.

์˜ˆ์™ธ

์˜ˆ์™ธ

์˜ˆ์™ธ์ฒ˜๋ฆฌ

  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ˆ์™ธ์˜ ๋ฐœ์ƒ์— ๋Œ€๋น„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ.
  • ๋ชฉ์ : ์˜ˆ์™ธ์˜ ๋ฐœ์ƒ์œผ๋กœ ์ธํ•œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ๋น„์ •์ƒ์ข…๋ฃŒ๋ฅผ ๋ง‰๊ณ , ์ •์ƒ์ ์ธ ์‹คํ–‰์ƒํƒœ ์œ ์ง€ํ•˜๊ธฐ.

์˜ˆ์™ธ

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


์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์˜ˆ์™ธ ์ง์ ‘์ฒ˜๋ฆฌํ•˜๊ธฐ try-catch๋ฌธ

  • ์ง์ ‘ ์ฒ˜๋ฆฌ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜์—์„œ ์˜ˆ์™ธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ
  • ๊ฒ€์‚ฌ๊ฒฐ๊ณผ๊ฐ€ true์ธ catch๋ธ”๋Ÿญ์„ ๋งŒ๋‚ ๋•Œ๊นŒ์ง€ ๊ฒ€์‚ฌ ๊ณ„์† ๋จ. ํ•˜๋‚˜๋„ ์•ˆ ๋งž์œผ๋ฉด ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์•ˆ๋จ.
  • ๊ทธ๋ž˜์„œ ๋ชจ๋“  ์˜ˆ์™ธ์˜ ์กฐ์ƒ์ธ Exception์„ ๋งˆ์ง€๋ง‰์—
    ์„ ์–ธํ•˜๊ธฐ๋„ ํ•จ.

์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜๊ธฐ try-catch๋ฌธ

์ง์ ‘์˜ˆ์™ธ์ฒ˜๋ฆฌ

๋ฉ€ํ‹ฐcatch๋ธ”๋ก

  • ๋ฐœ์ƒํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์˜ˆ์™ธ์— ๋Œ€ํ•˜์—ฌ ๊ฐ™์€ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋„ ๋  ๋•Œ ๋ฉ€ํ‹ฐcatch๋ธ”๋ก์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ. ๋Œ€์‹  ๋‘˜์ด ์กฐ์ƒ-์ž์† ๊ด€๊ณ„์ผ ๋•Œ๋Š” ์กฐ์ƒ ํ•˜๋‚˜๋งŒ ํ‘œํ˜„ํ•ด๋„ ๋จ. โ€˜|โ€™ ๊ธฐํ˜ธ๋กœ ์—ฐ๊ฒฐํ•จ.

์˜ˆ์™ธ ์ƒ์„ฑํ•˜๊ธฐ

  • ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘์— ์˜ˆ์™ธ๋ฅผ ์ธ์œ„์ ์œผ๋กœ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ(ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ ๋˜์ง€ ์•Š์„ ๋•Œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ)
  • ํ‚ค์›Œ๋“œ โ€˜throwโ€™๋ฅผ ์ด์šฉํ•ด ๊ณ ์˜๋กœ ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ.
  • ์—ฐ์‚ฐ์ž new๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
    • Exception e = new Exception(โ€œ๊ณ ์˜โ€);
    • ์ƒ์„ฑ์ž์— String์„ ๋„ฃ์–ด์ฃผ๋ฉด Exception์ธ์Šคํ„ด์Šค์— ๋ฉ”์‹œ์ง€๋กœ ์ €์žฅ๋จ.

์˜ˆ์™ธ ๋– ๋„˜๊ธฐ๊ธฐ

  • ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ๋˜์ ธ ํ˜ธ์ถœํ•œ ์ชฝ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ.
    • throw e;
    • ํ˜„์žฌ ์˜ˆ์™ธ ๊ฐ์ฒด โ€˜eโ€™๊ฐ€ ๋‹ค์‹œ ๋˜์ ธ์ง. ์ดํ›„ ์ž‘์„ฑ๋˜์–ด์žˆ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์— ๋”ฐ๋ผ ์‹คํ–‰๋จ.
    • ๋˜์ง„ ์˜ˆ์™ธ๋Š” ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•จ.

์˜ˆ์™ธ ์„ ์–ธํ•˜๊ธฐ

  • ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ.
  • public void myMethod( ) throws IOException { ... } ์™€ ๊ฐ™์ด ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€์— throws ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ IOException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Œ.
  • ์˜ˆ์™ธ ์„ ์–ธ์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Œ.

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๋งŒ๋“ค๊ธฐ

  • ํ•„์š”์— ๋”ฐ๋ผ ์˜ˆ์™ธํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ƒˆ๋กœ์šด ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ.
  • Exceptionํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด checked์˜ˆ์™ธ.
  • RunTimeExceptionํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด unchecked์˜ˆ์™ธ๊ฐ€ ๋จ. ์ตœ๊ทผ ํŠธ๋ Œ๋“œ์ž„.

์˜ˆ์™ธ ๋˜๋˜์ง€๊ธฐ

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

์˜ˆ์™ธ ๋˜๋˜์ง€๊ธฐ ์ฒ˜๋ฆฌ ์ƒํ™ฉ

์˜ˆ์™ธ ๋˜๋˜์ง€๊ธฐ


์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ

  • ํ•œ ์˜ˆ์™ธ๊ฐ€ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ.
  • Throwableํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ
  • initCause( Throwable cause ): ์ง€์ •๋œ ์˜ˆ์™ธ๋ฅผ ์›์ธ ์˜ˆ์™ธ๋กœ ๋“ฑ๋กํ•จ.
  • getCause( ): ์›์ธ ์˜ˆ์™ธ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ์˜ ์žฅ์ 

  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ.
    • checked์˜ˆ์™ธ๋ฅผ unchecked์˜ˆ์™ธ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ.

try-with-resource๋ฌธ

  • try๋ฌธ์˜ ( )๊ด„ํ˜ธ์•ˆ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ์žฅ์„ ๋„ฃ์œผ๋ฉด ์ด ๊ฐ์ฒด๋Š” try๋ธ”๋Ÿญ์„ ๋ฒ—์–ด๋‚˜๋Š” ์ˆœ๊ฐ„ ์ž๋™์ ์œผ๋กœ close( )๊ฐ€ ํ˜ธ์ถœ๋จ.
  • ๊ทธ๋‹ค์Œ์— catch๋‚˜ finally๋ธ”๋Ÿญ์ด ์ˆ˜ํ–‰๋จ. ๋‘ ๋ฌธ์žฅ ์ด์ƒ ์ž‘์„ฑ ์‹œ ; ๋กœ ๊ตฌ๋ถ„ํ•จ.