๐ฏ ์์ดํ 69. ์์ธ๋ ์ง์ง ์์ธ ์ํฉ์๋ง ์ฌ์ฉํ๋ผ.
- ์์ธ๋ฅผ ์์ ํ ์๋ชป ์ฌ์ฉํ ์ - ๋ฐ๋ผ ํ์ง ๋ง ๊ฒ!
try{
int i = 0;
while(true)
range[i++].climb();
} catch (ArrayIndexOutOfBoundsException e){
}
์ ์ฝ๋๋ ๋ฌดํ๋ฃจํ๋ฅผ ๋๋ค๊ฐ ๋ฐฐ์ด์ ๋์ ๋๋ฌํด ArrayIndexOutOfBoundsException
์ด ๋ฐ์ํ๋ฉด ๋์ ๋ด๋ ๊ฒ์ด๋ค. ํ์ง๋ง ํ์ค์ ์ธ ๊ด์ฉ๊ตฌ์ธ for-each
๋ก ์์ฑํ๋ค๋ฉด ๋ ์ดํดํ๊ธฐ ์ฝ๋ค.
for(Mountaion m : range)
m.climb();
๊ทธ๋ฐ๋ฐ ์์ธ๋ฅผ ์จ์ ๋ฃจํ๋ฅผ ์ข
๋ฃํ ์ด์ ๋ ๋ญ๊น?
๊ทธ ์ด์ ๋ ์๋ชป๋ ์ถ๋ก ์ ๊ทผ๊ฑฐ๋ก ์ฑ๋ฅ์ ๋์ฌ๋ณด๋ ค ํ ๊ฒ์ด๋ค. JVM์ ๋ฐฐ์ด์ ์ ๊ทผํ ๋๋ง๋ค ๊ฒฝ๊ณ๋ฅผ ๋์ง ์๋์ง ๊ฒ์ฌํ๋๋ฐ, ์ผ๋ฐ์ ์ธ ๋ฐ๋ณต๋ฌธ๋ ๋ฐฐ์ด ๊ฒฝ๊ณ์ ๋๋ฌํ๋ฉด ์ข
๋ฃํ๋ค. ๋ฐ๋ผ์ ์ด ๊ฒ์ฌ๋ฅผ ๋ฐ๋ณต๋ฌธ์๋ ๋ช
์ํ๋ฉด ๊ฐ์ ์ผ์ด ์ค๋ณต๋๋ฏ๋ก ํ๋๋ฅผ ์๋ตํ ๊ฒ์ด๋ค.
- ํ์ง๋ง ์ธ ๊ฐ์ง ๋ฉด์์ ์๋ชป๋ ์ถ๋ก ์ด๋ค.
- ์์ธ๋ ์์ธ ์ํฉ์ ์ธ ์ฉ๋๋ก ์ค๊ณ๋์์ผ๋ฏ๋ก JVM ๊ตฌํ์ ์ ์ฅ์์๋ ๋ช ํํ ๊ฒ์ฌ๋งํผ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ผ ํ ๋๊ธฐ๊ฐ ์ฝํ๋ค.
- ์ฝ๋๋ฅผ
try-catch
๋ธ๋ก ์์ ๋ฃ์ผ๋ฉด JVM์ด ์ ์ฉํ ์ ์๋ ์ต์ ํ๊ฐ ์ ํ๋๋ค. - ๋ฐฐ์ด์ ์ํํ๋ ํ์ค ๊ด์ฉ๊ตฌ๋ ์์ ๊ฑฑ์ ํ ์ค๋ณต ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์๋๋ค. 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=