Java

[Effective Java] ์•„์ดํ…œ 69. ์˜ˆ์™ธ๋Š” ์ง„์งœ ์˜ˆ์™ธ ์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๋ผ.

quedevel 2023. 4. 1. 10:38
728x90
๋ฐ˜์‘ํ˜•

๐ŸŽฏ ์•„์ดํ…œ 69. ์˜ˆ์™ธ๋Š” ์ง„์งœ ์˜ˆ์™ธ ์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๋ผ.

  • ์˜ˆ์™ธ๋ฅผ ์™„์ „ํžˆ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ - ๋”ฐ๋ผ ํ•˜์ง€ ๋ง ๊ฒƒ!
try{
    int i = 0;
    while(true)
        range[i++].climb();
} catch (ArrayIndexOutOfBoundsException e){
}

์œ„ ์ฝ”๋“œ๋Š” ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋Œ๋‹ค๊ฐ€ ๋ฐฐ์—ด์˜ ๋์— ๋„๋‹ฌํ•ด ArrayIndexOutOfBoundsException์ด ๋ฐœ์ƒํ•˜๋ฉด ๋์„ ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ‘œ์ค€์ ์ธ ๊ด€์šฉ๊ตฌ์ธ for-each๋กœ ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

for(Mountaion m : range)
    m.climb();

๊ทธ๋Ÿฐ๋ฐ ์˜ˆ์™ธ๋ฅผ ์จ์„œ ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•œ ์ด์œ ๋Š” ๋ญ˜๊นŒ?

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

  • ํ•˜์ง€๋งŒ ์„ธ ๊ฐ€์ง€ ๋ฉด์—์„œ ์ž˜๋ชป๋œ ์ถ”๋ก ์ด๋‹ค.
  1. ์˜ˆ์™ธ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ์“ธ ์šฉ๋„๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฏ€๋กœ JVM ๊ตฌํ˜„์ž ์ž…์žฅ์—์„œ๋Š” ๋ช…ํ™•ํ•œ ๊ฒ€์‚ฌ๋งŒํผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋™๊ธฐ๊ฐ€ ์•ฝํ•˜๋‹ค.
  2. ์ฝ”๋“œ๋ฅผ try-catch ๋ธ”๋ก ์•ˆ์— ๋„ฃ์œผ๋ฉด JVM์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™”๊ฐ€ ์ œํ•œ๋œ๋‹ค.
  3. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ํ‘œ์ค€ ๊ด€์šฉ๊ตฌ๋Š” ์•ž์„œ ๊ฑฑ์ •ํ•œ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. JVM์ด ์•Œ์•„์„œ ์ตœ์ ํ™”ํ•ด ์—†์• ์ค€๋‹ค.

์‹ค์ƒ์€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•œ ์ชฝ์ด ํ‘œ์ค€ ๊ด€์šฉ๊ตฌ๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆฌ๋‹ค.

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

๋”ฐ๋ผ์„œ, ์˜ˆ์™ธ๋Š” ์˜ค์ง ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ๋งŒ ์จ์•ผ ํ•œ๋‹ค. ์ ˆ๋Œ€๋กœ ์ผ์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์šฉ์œผ๋กœ ์“ฐ์—ฌ์„  ์•ˆ ๋œ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

Joshua Bloch, ใ€ŽEffective Java 3/Eใ€, ๊ฐœ์•ž๋งต์‹œ ์˜ฎ๊น€, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ์‚ฌ์ดํŠธ(2018)
http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788966262281&orderClick=LEa&Kc=

728x90
๋ฐ˜์‘ํ˜•