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

์˜ˆ์™ธ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ

๊ฒ€์‚ฌ ์˜ˆ์™ธ์™€ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€

์–ด๋–ค ๋ฉ”์„œ๋“œ์— ์˜ˆ์™ธ๋ฅผ ๋„ฃ์œผ๋ ค๊ณ  ํ•  ๋•Œ

๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณต๊ตฌํ• ๊ฑฐ๋ผ ์—ฌ๊ฒจ์ง€๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด

(์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด) ๊ฒ€์‚ฌ ์˜ˆ์™ธ(checked exception)๋ฅผ,

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ(unchecked exception)๋ฅผ ์‚ฌ์šฉํ•˜์ž.

๊ฒ€์‚ฌ ์˜ˆ์™ธ์˜ ํŠน์ง•(Exception)

Exception ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค์ด๋‹ค.

(Throwable ํด๋ž˜์Šค๋„ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š”

์•”๋ฌต์  ๊ทœ์น™์ด ์žˆ์œผ๋ฏ€๋กœ ์ œ์™ธํ•˜๊ณ  ์ƒ๊ฐํ•˜์ž)

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

์œ ๋ ฅํ•œ ๊ฒฐ๊ณผ์ž„์„ API ํด๋ผ์ด์–ธํŠธ(์‚ฌ์šฉ์ž)์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์™ธ๋ฅผ catch๋งŒ ํ•˜๊ณ  ๋ณ„๋‹ค๋ฅธ ์กฐ์น˜๋ฅผ ์ทจํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ,

์ด๋Š” ๋ณดํ†ต ์ข‹์ง€ ์•Š์€ ์ƒ๊ฐ์ด๋‹ค(item77)

๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ์˜ ํŠน์ง•(RuntimeException)

RuntimeException ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ ๋Œ€ํ‘œ์ ์ธ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค์ด๋‹ค.

(Error ํด๋ž˜์Šค๋„ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š”

์•”๋ฌต์  ๊ทœ์น™์ด ์žˆ์œผ๋ฏ€๋กœ ์ œ์™ธํ•˜๊ณ  ์ƒ๊ฐํ•˜์ž)

์ด ์˜ˆ์™ธ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ catchํ•  ํ•„์š”๊ฐ€ ์—†๊ฑฐ๋‚˜ catch ํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ์˜ˆ์™ธ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ๋‹ค๋Š” ๊ฒƒ์€ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋” ์‹คํ–‰ํ•ด๋ด์•ผ

๋“๋ณด๋‹ค๋Š” ์‹ค์ด ๋งŽ๋‹ค๋Š” ๋œป์ด๋‹ค. ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด catch ํ•ด๋ดค์ž ์˜๋ฏธ์—†๋‹ค.

('๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ผ์•ผ ํ•œ๋‹ค' ๋ผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง„๋‹ค)

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณต๊ตฌํ•ด์•ผํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํŒ๋‹จํ•˜๋ฉด ์ข‹์„๊นŒ?

๊ธฐ์ค€์„ '์ž˜' ์„ธ์›Œ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์™ธ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ผ์ƒ์˜ ์ด๋Ÿฐ์ €๋Ÿฐ ๋งŽ์€ ์ผ์—์„œ๋„ ๊ธฐ์ค€์„ '์ž˜' ์„ธ์šฐ๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๋“ฏ

์˜ˆ์™ธ๋ฅผ ์ ์ ˆํžˆ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š๋‹ค

๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๊ฐ€ ์žˆ๋Š”) ์ƒํ™ฉ์ธ์ง€ ํ˜น์€

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

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

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

์ „์ž๋Š” ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ์ด๊ณ  ํ›„์ž๋Š” ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์‚ฌ ์˜ˆ์™ธ์ด๋‹ค.

์ด๋Ÿฌํ•œ ํŒ๋‹จ์€ ์ „์ ์œผ๋กœ API ์„ค๊ณ„์ž์—๊ฒŒ ๋‹ฌ๋ ค์žˆ๋‹ค.

ํŒ๋‹จํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋ฉด ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ์„ ํƒํ•˜๋Š”๊ฒƒ์ด ๋‚˜์„ ๊ฒƒ์ด๋‹ค(item71)

๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

๊ฒ€์‚ฌ ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ผ ๋•Œ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋ณต๊ตฌ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ

์•Œ๋ ค์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•ด์•ผ ๊ทธ ์ฑ…์ž„์„ ๋‹คํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ATM๊ธฐ์—์„œ ํ˜„๊ธˆ์„ ์ธ์ถœํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ•˜๋ฃจ์— ์ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ•œ๋„๋ฅผ ๋„˜์–ด์„œ๋Š” ๊ธˆ์•ก์„

์ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด 'ํ•˜๋ฃจ์— ์ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ•œ๋„๋ฅผ ๋„˜์–ด์„ฐ์Šต๋‹ˆ๋‹ค' ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„์›Œ์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์•ผ ์‚ฌ์šฉ์ž๋Š” ๊ธˆ์•ก์„ ์žฌ์„ค์ •ํ•ด์„œ ์ธ์ถœ์„ ํ•˜๋Š” ๋“ฑ์˜ ์ธ์ถœ ๊ณผ์ • ๋ณต๊ตฌ(?) ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

(์ธ์ถœ ์ „์— ํ•œ๋„ ๋ฉ”์„ธ์ง€๋ฅผ ํ™”๋ฉด์— ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ฃผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๋ฌธ๊ตฌ๋ฅผ ์•ˆ๋ณด๋Š” ์‚ฌ๋žŒ๋“ค์ด ๊ผญ ์žˆ๊ธฐ ๋งˆ๋ จ์ด๋‹ค)

์—ฌ๋‹ด :: ์˜ˆ์™ธ ๋ฉ”์„œ๋“œ์˜ ์กด์žฌ ์ด์œ 

API ์„ค๊ณ„์ž๋“ค๋„ ์˜ˆ์™ธ ์—ญ์‹œ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ผ๋„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์™„๋ฒฝํ•œ ๊ฐ์ฒด๋ผ๋Š” ์‚ฌ์‹ค์„ ์žŠ๊ณค ํ•œ๋‹ค.

์˜ˆ์™ธ์˜ ๋ฉ”์„œ๋“œ(printStackTrace ๋“ฑ)๋Š” ์ฃผ๋กœ ๊ทธ ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚จ ์ƒํ™ฉ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ

์ฝ”๋“œ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•˜๋Š”๋ฐ ์“ฐ์ธ๋‹ค. ์ด๋Ÿฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ

ํŒŒ์‹ฑํ•ด์„œ ์ •๋ณด๋ฅผ ๋นผ๋‚ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ๊ต‰์žฅํžˆ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค. (item12)

์™œ๋ƒํ•˜๋ฉด JVM์ด๋‚˜ ๋ฆด๋ฆฌ์Šค์— ๋”ฐ๋ผ ํฌ๋งท์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(Throwable ํด๋ž˜์Šค๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€ ํฌ๋งท์„ ์ƒ์„ธํžˆ ๊ธฐ์ˆ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค)