item 74 junghyunlyoo - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
๊ฒ์ฌ ์์ธ ๋ฌธ์ํ์ ์ค์์ฑ
๊ฒ์ฌ ์์ธ๋ ํญ์ ๋ฐ๋ก๋ฐ๋ก ์ ์ธํ๊ณ , ๊ฐ ์์ธ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ ์๋ฐ๋ ์ @throws ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ๋ฌธ์ํํ์.
Exception, Throwable๊ฐ์ ๊ณตํต ์์ ์์ธ๋ก ํ์น์ง๋ ๋ง์. ์๋ํ๋ฉด ๋ฉ์๋ ์ฌ์ฉ์์๊ฒ ๊ฐ ์์ธ์ ๋์ฒํ ์ ์๋ ํํธ๋ฅผ ์ฃผ์ง ๋ชปํ๋ค.
๋ํ ๊ฐ์ ๋งฅ๋ฝ์์ ๋ฐ์ํ ์ฌ์ง๊ฐ ์๋ ๋ค๋ฅธ ์์ธ๋ค๊น์ง ํฌํจ์์ผ๋ฒ๋ฆด ์ ์์ด API ์ฌ์ฉ์ฑ์ ํฌ๊ฒ ๋จ์ด๋จ๋ฆฐ๋ค.
main ๋ฉ์๋๋ ์ด ๊ท์น์ ์ ์ผํ ์์ธ์ด๋ค.
main์ ์ค์ง JVM๋ง์ด ํธ์ถํ๋ฏ๋ก Exception์ ๋์ง๋๋ก ์ ์ธํด๋ ๊ด์ฐฎ๋ค.
๋น๊ฒ์ฌ ์์ธ ๋ฌธ์ํ์ ์ค์์ฑ
์๋ฐ ์ธ์ด๊ฐ ์๊ตฌํ๋ ๊ฒ์ ์๋์ง๋ง ๋น๊ฒ์ฌ ์์ธ๋ ๋ฌธ์ํํด๋๋ฉด ์ข๋ค.
๋น๊ฒ์ฌ ์์ธ๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ๋ฅผ ๋ปํ๋๋ฐ (item 79), ์์ ์ด ์ผ์ผํฌ ์ ์๋ ์ค๋ฅ๋ค์ด ๋ฌด์์ธ์ง ์๋ ค์ฃผ๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ์์ฐ์ค๋ฝ๊ฒ ํด๋น ์ค๋ฅ๊ฐ ๋์ง ์๋๋ก ์ฝ๋ฉํ๊ฒ ๋๋ค.
์ ์ ๋น๋ ๋น๊ฒ์ฌ ์์ธ ๋ฌธ์๋ ์ฌ์ค์ ๊ทธ ๋ฉ์๋๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ์ ์ ์กฐ๊ฑด์ด ๋๋ค.
public ๋ฉ์๋๋ผ๋ฉด ํ์ํ ์ ์ ์กฐ๊ฑด์ ๋ฌธ์ํํด์ผ ํ๋ฉฐ(item 56) ๊ทธ ์๋จ์ผ๋ก ๊ฐ์ฅ ์ข์ ๊ฒ์ด ๋ฐ๋ก ๋น๊ฒ์ฌ ์์ธ๋ค์ ๋ฌธ์ํํ๋ ๊ฒ์ด๋ค.
๋ฐ์ ๊ฐ๋ฅํ ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋ฌธ์๋ก ๋จ๊ธฐ๋ ์ผ์ ์ธํฐํ์ด์ค ๋ฉ์๋์์ ํนํ ์ค์ํ๋ค.
์ด ์กฐ๊ฑด์ด ์ธํฐํ์ด์ค์ ์ผ๋ฐ ๊ท์ฝ์ ์ํ๊ฒ ๋์ด ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ชจ๋ ๊ตฌํ์ฒด๊ฐ ์ผ๊ด๋๊ฒ ๋์ํ๋๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฉ์๋๊ฐ ๋์ง ์ ์๋ ์์ธ๋ฅผ ๊ฐ๊ฐ @throws ํ๊ทธ๋ก ๋ฌธ์ํํ๋, ๋น๊ฒ์ฌ ์์ธ๋ ๋ฉ์๋ ์ ์ธ์ throws ๋ชฉ๋ก์ ๋ฃ์ง ๋ง์.
๊ฒ์ฌ๋ ๋น๊ฒ์ฌ๋์ ๋ฐ๋ผ API ์ฌ์ฉ์๊ฐ ํด์ผ ํ ์ผ์ด ๋ฌ๋ผ์ง๋ฏ๋ก ์ด ๋์ ํ์คํ ๊ตฌ๋ถํด์ฃผ๋ ๊ฒ ์ข๋ค.
์๋ฐ๋ ์ ํธ๋ฆฌํฐ๋ ๋ฉ์๋ ์ ์ธ์ throws ์ ์ ๋ฑ์ฅํ๊ณ ๋ฉ์๋ ์ฃผ์์ @throws ํ๊ทธ์๋ ๋ช ์ํ ์์ธ์ @throws ํ๊ทธ์๋ง ๋ช ์ํ ์์ธ๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํด์ค๋ค.
๊ทธ๋์ ํ๋ก๊ทธ๋๋จธ๋ ์ด๋ ๊ฒ์ด ๋น๊ฒ์ฌ ์์ธ์ธ์ง๋ฅผ ๋ฐ๋ก ์ ์ ์๋ค.
๋น๊ฒ์ฌ ์์ธ๋ ๋ชจ๋ ๋ฌธ์ํํ๋ผ๊ณ ๋ ํ์ง๋ง ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ๋๋ ์๋ค.
ํด๋์ค๋ฅผ ์์ ํ๋ฉด์ ์๋ก์ด ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๊ฒ ๋์ด๋ ์์ค ํธํ์ฑ๊ณผ ๋ฐ์ด๋๋ฆฌ ํธํ์ฑ์ด ๊ทธ๋๋ก ์ ์ง๋๋ค๋ ๊ฒ ๊ฐ์ฅ ํฐ ์ด์ ๋ค.
์์ปจ๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ ์๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ์์ธ๋ฅผ ๊ณต๋ค์ฌ ๋ฌธ์ํํ๋ค.
ํ์ง๋ง ํ์ ์ด ์ธ๋ถ ํด๋์ค๊ฐ ์๋ก์ด ๋น๊ฒ์ฌ ์์ธ๋ฅผ ๋์ง๊ฒ ์์ ๋๋ค๋ฉด, ์๋ฌด ์์ ๋ ํ์ง ์์ ์ฐ๋ฆฌ ๋ฉ์๋๋ ๋ฌธ์์ ์ธ๊ธ๋์ง ์์ ์๋ก์ด ๋น๊ฒ์ฌ ์์ธ๋ฅผ ์ ํํ๊ฒ ๋ ๊ฒ์ด๋ค.
ํ ํด๋์ค์ ์ ์๋ ๋ง์ ๋ฉ์๋๊ฐ ๊ฐ์ ์ด์ ๋ก ๊ฐ์ ์์ธ๋ฅผ ๋์ง๋ค๋ฉด, ๊ทธ ์์ธ๋ฅผ ๊ฐ๊ฐ์ ๋ฉ์๋ ๋ ๋ฒจ์ ์ค๋ช ์ด ์๋ ํด๋์ค ๋ ๋ฒจ์ ์ค๋ช ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๋ค. (ex NPE)