Skip to content

Latest commit

ย 

History

History
116 lines (85 loc) ยท 4.54 KB

File metadata and controls

116 lines (85 loc) ยท 4.54 KB

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

์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—์„œ ํ”ํžˆ ์ €์ง€๋ฅด๋Š” ์‹ค์ˆ˜์™€ ์˜ฌ๋ฐ”๋ฅธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

1. ๋นˆ catch ๋ธ”๋ก์˜ ์œ„ํ—˜์„ฑ

  • ๋ฌธ์ œ์ :
    • ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ๋ฌธ์ œ ์ƒํ™ฉ์„ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ˆ„์ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • ๋นˆ catch ๋ธ”๋ก์€ ํ™”์žฌ๊ฒฝ๋ณด๋ฅผ ๊บผ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ. ๋ฌธ์ œ๋ฅผ ์•Œ๋ฆฌ์ง€ ์•Š๊ณ  ์ˆจ๊ธด๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์›์ธ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ์ง€์ ์—์„œ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ: ๋‚˜์œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

try {
    // ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ
} catch (SomeException e) {
    // ์•„๋ฌด๋Ÿฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์Œ
}

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

  • ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์กด์žฌํ•˜๊ธด ํ•˜์ง€๋งŒ, ์ด๋Š” ๋งค์šฐ ๋“œ๋ฌผ๋‹ค.
  • ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•  ๊ฒฝ์šฐ๋ผ๋„ ๋ฐ˜๋“œ์‹œ ๊ทธ ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ์ฃผ์„์œผ๋กœ ๋‚จ๊ธฐ๊ณ , ๊ฐ€๋Šฅํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์•ผ ํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ์™ธ ๋ฌด์‹œ ์‚ฌ๋ก€

  • ํŒŒ์ผ ๋‹ซ๊ธฐ: ์ž…๋ ฅ ์ „์šฉ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋ณต๊ตฌํ•  ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ๋ฌด์‹œ ๊ฐ€๋Šฅ.

์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์™ธ ๋ฌด์‹œ ์˜ˆ์ œ

try {
    inputStream.close();
} catch (IOException ignored) {
    // ํŒŒ์ผ ๋‹ซ๋Š” ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒ: ๋ณต๊ตฌ ํ•„์š” ์—†์Œ. ๋กœ๊ทธ ์ž‘์„ฑ ๊ฐ€๋Šฅ.
    logger.warn("Failed to close the input stream, but no action needed.");
}
  • ignored ๋ณ€์ˆ˜ ์ด๋ฆ„ ์‚ฌ์šฉ: ์˜ˆ์™ธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌด์‹œํ•œ๋‹ค๋Š” ์˜๋„๋ฅผ ์ฝ”๋“œ์— ๋‹ด๋Š”๋‹ค.

3. ์ ์ ˆํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ์•ˆ

์ ์ ˆํ•œ ๋Œ€์ฒด ์กฐ์น˜

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์œ ์ง€ํ•  ๋Œ€์ฒด ๋ฐฉ์•ˆ์„ ๋งˆ๋ จ.
  • ์˜ˆ์‹œ: ํƒ€์ž„์•„์›ƒ ๋ฐœ์ƒ ์‹œ ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ.
Future<Integer> future = executor.submit(task);
int result = DEFAULT_VALUE; // ๊ธฐ๋ณธ๊ฐ’
try {
    result = future.get(10, TimeUnit.SECONDS); // ํƒ€์ž„์•„์›ƒ ์„ค์ •
} catch (TimeoutException | ExecutionException ignored) {
    // ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ
    logger.warn("Task timed out. Using default value.");
}

๋กœ๊ทธ ์ž‘์„ฑ

  • ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ ์ถ”ํ›„ ๋ถ„์„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.
  • ์˜ˆ์‹œ:
try {
    someMethod();
} catch (SomeException e) {
    logger.error("An exception occurred during someMethod execution", e);
}

๊ฐ€๋Šฅํ•œ ํ•œ ์˜ˆ์™ธ๋ฅผ ๋ฐ”๊นฅ์œผ๋กœ ์ „ํŒŒ

  • ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ฑ…์ž„์ด ์—†๋Š” ๊ฒฝ์šฐ, ์ƒ์œ„ ํ˜ธ์ถœ์ž์—๊ฒŒ ์˜ˆ์™ธ๋ฅผ ์ „ํŒŒ.
  • ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์†Œํ•œ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ.

์˜ˆ์‹œ: ์˜ˆ์™ธ ์ „ํŒŒ

public void process() throws IOException {
    // ์ƒ์œ„ ํ˜ธ์ถœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์˜ˆ์™ธ๋ฅผ ๋˜์ง
    someMethod();
}

4. ์˜ˆ์™ธ ๋ฌด์‹œ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ

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

5. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์ผ๋ฐ˜ ์›์น™

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

๐Ÿ“š ๊ฒฐ๋ก 

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