item 73 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
์์ดํ 73 ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ฅผ ๋์ง๋ผ
์ํํ๋ ค๋ ์ผ๊ณผ ๊ด๋ จ ์์ด ๋ณด์ด๋ ์์ธ๊ฐ ํ์ด๋์ค๋ฉด ๋นํฉ์ค๋ฌ์ธ ๊ฒ์ด๋ค. ๋ฉ์๋๊ฐ ์ ์์ค ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์๊ณ
๋ฐ๊นฅ์ผ๋ก ์ ํํด๋ฒ๋ฆด ๋ ์ข ์ข ์ผ์ด๋๋ ์ผ์ด๋ค. ์ฌ์ค ์ด๋ ๋จ์ํ ํ๋ก๊ทธ๋๋จธ๋ฅผ ๋นํฉ์ํค๋ ๋ฐ ๊ทธ์น์ง ์๊ณ , ๋ด๋ถ ๊ตฌํ ๋ฐฉ์์ ๋๋ฌ๋ด์ด ์ ๋ ๋ฒจ API๋ฅผ ์ค์ผ์ํจ๋ค.
์์ธ๋ฅผ ์ ํํ๋ผ
์ด ๋ฌธ์ ๋ฅผ ํผํ๋ ค๋ฉด ์์ ๊ณ์ธต์์๋ ์ ์์ค ์์ธ๋ฅผ ์ก์ ์์ ์ ์ถ์ํ ์์ค์ ๋ง๋ ์์ธ๋ก ๋ฐ๊ฟ ๋์ ธ์ผ ํ๋ค.
try {
... // ์ ์์ค ์ถ์ํ๋ฅผ ์ด์ฉํ๋ค.
} catch (LowerLevelException e) {
// ์ถ์ํ ์์ค์ ๋ง๊ฒ ๋ฒ์ญํ๋ค.
throw new HigherLevelException(...);
}
์์ธ ์ฐ์๋ฅผ ์ฌ์ฉํ๋ผ
์์ธ๋ฅผ ๋ฒ์ญํ ๋, ์ ์์ค ์์ธ๊ฐ ๋๋ฒ๊น ์ ๋์์ด ๋๋ค๋ฉด ์์ธ ์ฐ์(exception chaning)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค. ์์ธ ์ฐ์๋ ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ์ธ ์ ์์ค ์์ธ๋ฅผ ๊ณ ์์ค ์์ธ์ ์ค์ด ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
try {
... // ์ ์์ค ์ถ์ํ๋ฅผ ์ด์ฉํ๋ค.
} catch (LowerLevelException cause) {
// ์ ์์ค ์์ธ๋ฅผ ๊ณ ์์ค ์์ธ์ ์ค์ด ๋ณด๋ธ๋ค.
throw new HigherLevelException(cause);
}
๊ณ ์์ค ์์ธ์ ์์ฑ์๋ (์์ธ ์ฐ์์ฉ์ผ๋ก ์ค๊ณ๋) ์์ ํด๋์ค์ ์์ฑ์์ '์์ธ'์ ๊ฑด๋ค์ฃผ์ด, ์ต์ข ์ ์ผ๋ก Throwable(Throwable) ์์ฑ์๊น์ง ๊ฑด๋ค์ง๊ฒํ๋ค.
์์ธ๋ฅผ ์๋ฐฉํ๋ผ
๋ฌดํฑ๋๊ณ ์์ธ๋ฅผ ์ ํํ๋ ๊ฒ๋ณด๋ค์ผ ์์ธ ๋ฒ์ญ์ด ์ฐ์ํ ๋ฐฉ๋ฒ์ด์ง๋ง, ๊ทธ๋ ๋ค๊ณ ๋จ์ฉํด์๋ ๊ณค๋ํ๋ค. ๊ฐ๋ฅํ๋ค๋ฉด ์ ์์ค ๋ฉ์๋๊ฐ ๋ฐ๋์ ์ฑ๊ณตํ๋๋กํ์ฌ ์๋ ๊ณ์ธต์์๋ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ต์ ์ด๋ค.
์ฐจ์ ์ฑ ๋ ๊ณ ๋ คํด๋ณด์
์๋ ๊ณ์ธต์์์ ์์ธ๋ฅผ ํผํ ์ ์๋ค๋ฉด, ์์ ๊ณ์ธต์์ ๊ทธ ์์ธ๋ฅผ ์กฐ์ฉํ ์ฒ๋ฆฌํ์ฌ ๋ฌธ์ ๋ฅผ API ํธ์ถ์์๊น์ง ์ ํ๋ผ์ง ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ์ํ ์์ธ๋ java.util.logging ๊ฐ์ ์ ์ ํ ๋ก๊น ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ธฐ๋กํด๋๋ฉด ์ข๋ค. ๊ทธ๋ ๊ฒ ํด๋๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋์ ์ฌ์ฉ์์๊ฒ ๋ฌธ์ ๋ฅผ ์ ํํ์ง ์์ผ๋ฉด์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ก๊ทธ๋ฅผ ๋ถ์ํด ์ถ๊ฐ ์กฐ์น๋ฅผ ์ทจํ ์ ์๊ฒ ํด์ค๋ค.
์ ๋ฆฌ
์๋ ๊ณ์ธต์ ์์ธ๋ฅผ ์๋ฐฉํ๊ฑฐ๋ ์ค์ค๋ก ์ฒ๋ฆฌํ ์ ์๊ณ , ๊ทธ ์์ธ๋ฅผ ์์ ๊ณ์ธต์ ๊ทธ๋๋ก ๋ ธ์ถํ๊ธฐ ๊ณค๋ํ๋ค๋ฉด ์์ธ ๋ฒ์ญ์ ์ฌ์ฉํ๋ผ. ์ด๋ ์์ธ ์ฐ์๋ฅผ ์ด์ฉํ๋ฉด ์์ ๊ณ์ธต์๋ ๋งฅ๋ฝ์ ์ด์ธ๋ฆฌ๋ ๊ณ ์์ค ์์ธ๋ฅผ ๋์ง๋ฉด์ ๊ทผ๋ณธ ์์ธ๋ ํจ๊ป ์๋ ค์ฃผ์ด ์ค๋ฅ๋ฅผ ๋ถ์ํ๊ธฐ์ ์ข๋ค.