item 77 lsucret - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

[item 77] ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜์ง€ ๋ง๋ผ

๊ฒ€์‚ฌ, ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ€์„  ์•ˆ๋œ๋‹ค.

API ์„ค๊ณ„์ž๊ฐ€ ๋ฉ”์„œ๋“œ ์„ ์–ธ์— ์˜ˆ์™ธ๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊นŒ๋‹ญ์€ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ์‹œ ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•ด๋‹ฌ๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒฝ์šฐ(๋น„๊ถŒ์žฅ) ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

try {
	...
} catch (SomeException e) {
// catch ๋ธ”๋ก์„ ๋น„์›Œ๋‘๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฌด์‹œ๋œ๋‹ค. ์•„์ฃผ ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ฝ”๋“œ๋‹ค!
}

catch ๋ธ”๋ก์„ ๋น„์›Œ๋‘๋ฉด ์˜ˆ์™ธ๊ฐ€ ์กด์žฌํ•  ์ด์œ ๊ฐ€ ์—†์–ด์ง„๋‹ค.

์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค๋ฉด ๋จธ๋ฆฟ์†์— ์‚ฌ์ด๋ Œ์„ ์šธ๋ฆฌ์ž.

์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ๋„ ์žˆ๋‹ค.

ex) FileImputStream์„ ๋‹ซ๋Š” ์ฝ”๋“œ

ํŒŒ์ผ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋ณต๊ตฌํ•  ๊ฒƒ์ด ์—†๊ณ 

์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š”๋‹ค๋Š”๊ฑด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ด๋ฏธ ์ฝ์—ˆ๋‹ค๋Š” ๋œป์ด๋‹ˆ ๋‚จ์€ ์ž‘์—…์„ ์ค‘๋‹จํ•  ์ด์œ ๋„ ์—†๋‹ค.

์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๊ธฐ๋กœ ์ •ํ–ˆ๋‹ค๋ฉด ๊ทธ ์ด์œ ๋ฅผ ์ฃผ์„์œผ๋กœ ๋‚จ๊ธฐ๊ณ  ์˜ˆ์™ธ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ignored๋กœ ์ž‘์„ฑํ•œ๋‹ค.

Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; // ๊ธฐ๋ณธ๊ฐ’. ์–ด๋–ค ์ง€๋„๋ผ๋„ ์ด ๊ฐ’์ด๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.
try {
	numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExecutionException ignored) {
	// ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค(์ƒ‰์ƒ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด ์ข‹์ง€๋งŒ, ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค.)
}

ํ•„์š”์„ฑ

๋นˆ catch ๋ธ”๋ก์„ ๋ชป ๋ณธ ์ฒ™ ์ง€๋‚˜์ณ๋ฒ„๋ฆฐ๋‹ค๋ฉด
ํ”„๋กœ๊ทธ๋žจ์€ ์˜ค๋ฅ˜๋ฅผ ๋‚ด์žฌํ•œ ์ฑ„ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๊ณ  ์ถ”ํ›„ ๋ฌธ์ œ์˜ ์›์ธ๊ณผ ์•„๋ฌด ์ƒ๊ด€์—†๋Š” ๊ณณ์—์„œ ๊ฐ‘์ž๊ธฐ ์ฃฝ์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

์˜ˆ์™ธ๋ฅผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ์™„์ „ํžˆ ํ”ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

๋ฌด์‹œํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๊นฅ์œผ๋กœ ์ „ํŒŒ๋˜๊ฒŒ๋งŒ ๋†”๋‘ฌ๋„ ์ตœ์†Œํ•œ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ๋‚จ๊ธด ์ฑ„ ํ”„๋กœ๊ทธ๋žจ์ด ์‹ ์†ํžˆ ์ค‘๋‹จ๋˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ