item 70 hyowon - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—๋Š” ๊ฒ€์‚ฌ ์˜ˆ์™ธ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜์—๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCoRfv%2FbtqyGd7HANT%2FTNQPOSMBCCunOdqH2DikaK%2Fimg.png

throwable - ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž

์•”๋ฌต์ ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ๊ฒ€์‚ฌ ์˜ˆ์™ธ์ฒ˜๋Ÿผ ๋‹ค๋ฃฌ๋‹ค.

๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€๋” ์žŠ๊ณค ํ•˜๋Š” ์ ์€, ์˜ˆ์™ธ ์—ญ์‹œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ผ๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝํ•œ ๊ฐ์ฒด๋ผ๋Š” ์ ์ด๋‹ค. ์˜ˆ์™ธ์˜ ๋ฉ”์„œ๋“œ(printStackTrace ๋“ฑ)๋Š” ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚จ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค. ์˜ˆ์™ธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํŒจ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž์„ธํ•˜๊ฒŒ ๋‹ด์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, throwable ํด๋ž˜์Šค๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํฌ๋งท์ด ์ƒ์„ธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ JVM์ด๋‚˜ ๋ฆด๋ฆฌ์Šค์— ๋”ฐ๋ผ ํฌ๋งท์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ throwable์€ ์ •์ƒ์ ์ธ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ณด๋‹ค ๋‚˜์„๊ฒŒ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด์„œ API ์‚ฌ์šฉ์ž๋ฅผ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ํ•  ๋ฟ์ด๋‹ˆ ์ฑ…์—์„œ๋Š” ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ๋‹ค.

๊ฒ€์‚ฌ ์˜ˆ์™ธ(checked Exception) - ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ๋ณต๊ตฌ

Exception ํด๋ž˜์Šค์—์„œ RuntimeException์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์ด ๊ฒ€์‚ฌ ์˜ˆ์™ธ์ด๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ ์—ฌ๊ฒจ์ง€๋ฉด ๋˜์ง€๊ฒŒ ๋œ๋‹ค.

๋ฉ”์„œ๋“œ ์„ ์–ธ์— ํฌํ•จ๋œ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ๊ฐ๊ฐ์€ ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ๋ ฅํ•œ ๊ฒฐ๊ณผ์ž„์„ API ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

throwable์—์„œ ๋งํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ, ์˜ˆ์™ธ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํŒจ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์•„์•ผ ํ•œ๋‹ค.(item 75์— ๊ณ„์†)

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

์—๋Ÿฌ - ๋˜์ง€๊ฑฐ๋‚˜, ์ƒ์†๋ฐ›์ง€ ๋ง์ž

๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ๋” ์‹คํ–‰ํ•ด๋ด์•ผ ๋“๋ณด๋‹ค๋Š” ์‹ค์ด ๋งŽ๋‹ค๋Š” ๋œป์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์ ์ ˆํ•œ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ๋‚ด๋ฑ‰์œผ๋ฉฐ ์ค‘๋‹จ๋œ๋‹ค.

JVM ์ž์› ๋ถ€์กฑ, ๋ถˆ๋ณ€์‹ ๊นจ์ง ๋“ฑ ๋” ์ด์ƒ ์ˆ˜ํ–‰์„ ๊ณ„์†ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์— ์‚ฌ์šฉ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์—…๊ณ„์— ํผ์ง„ ์•ฝ์†์œผ๋กœ Error ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ throw๋กœ ๋˜์ง€์ง€๋„ ๋ง์ž.

์ฆ‰, ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” RuntimeException์„ ์ƒ์†๋ฐ›์•„์•ผ ํ•œ๋‹ค.

RuntimeException - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜

๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜, ๋” ์‹คํ–‰ํ•ด๋ด์•ผ ๋“๋ณด๋‹ค๋Š” ์‹ค์ด ๋งŽ๋‹ค๋Š” ๋œป์œผ๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ์ ์ ˆํ•œ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ๋‚ด๋ฑ‰์œผ๋ฉฐ ์ค‘๋‹จ๋œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๋Ÿฐํƒ€์ž„์˜ˆ์™ธ๋Š” ์ „์ œ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

๋‹ค๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ธ์ง€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜์ธ์ง€๊ฐ€ ํ•ญ์ƒ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์› ๊ณ ๊ฐˆ์€ ๋ง๋„ ์•ˆ ๋˜๋Š” ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•ด ์ƒ๊ธด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์ง„์งœ๋กœ ์ž์›์ด ๋ถ€์กฑํ•ด์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

๋งŒ์•ฝ ์ž์›์ด ์ผ์‹œ์ ์œผ๋กœ ๋ถ€์กฑํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ฏฟ๋Š”๋‹ค๋ฉด ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด RuntimeException์„ ์‚ฌ์šฉํ•˜์ž.

์ •๋ฆฌ

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋กœ,

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋กœ ๋˜์ง„๋‹ค.

throwable๊ณผ Error๋Š” ์ƒ์†๋ฐ›๊ฑฐ๋‚˜, ๋˜์ง€์ง€ ๋ง์ž.