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 ๊ฐ™์€ ์ ์ ˆํ•œ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ๋กํ•ด๋‘๋ฉด ์ข‹๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด๋‘๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ „ํŒŒํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•ด ์ถ”๊ฐ€ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

์ •๋ฆฌ

์•„๋ž˜ ๊ณ„์ธต์˜ ์˜ˆ์™ธ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ฑฐ๋‚˜ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ณ , ๊ทธ ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ ๊ณ„์ธต์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•˜๊ธฐ ๊ณค๋ž€ํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ ๋ฒˆ์—ญ์„ ์‚ฌ์šฉํ•˜๋ผ. ์ด๋•Œ ์˜ˆ์™ธ ์—ฐ์‡„๋ฅผ ์ด์šฉํ•˜๋ฉด ์ƒ์œ„ ๊ณ„์ธต์—๋Š” ๋งฅ๋ฝ์— ์–ด์šธ๋ฆฌ๋Š” ๊ณ ์ˆ˜์ค€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด์„œ ๊ทผ๋ณธ ์›์ธ๋„ ํ•จ๊ป˜ ์•Œ๋ ค์ฃผ์–ด ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•˜๊ธฐ์— ์ข‹๋‹ค.