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 ํด๋์ค๋ค์ ๋๋ถ๋ถ ์ค๋ฅ ๋ฉ์ธ์ง ํฌ๋งท์ ์์ธํ ๊ธฐ์ ํ์ง ์๋๋ค๊ณ ํ๋ค)