์ง์ญ๋ณ์์ ์ ํจ ๋ฒ์๋ฅผ ์ต์๋ก ์ค์ด๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๊ณ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ๋ฎ์์ง๋ค.
์ด๋ฒ ๊ธ์ ํตํด ์ง์ญ๋ณ์์ ๋ฒ์๋ฅผ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๐ 1. ์ง์ญ๋ณ์๋ฅผ ๊ฐ์ฅ ์ฒ์ ์ฐ์ผ ๋ ์ ์ธํ๋ผ.
์ง์ญ๋ณ์์ ๋ฒ์๋ฅผ ์ค์ด๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฒ์ ์ง์ญ๋ณ์๋ฅผ ๊ฐ์ฅ ์ฒ์ ์ฐ์ผ ๋ ์ ์ธํ๋ ๊ฒ์ด๋ค. ์ ์ธ์ ๋ฏธ๋ฆฌ ํด๋๋ฉด ์ฝ๋๊ฐ ์ด์์ ํด์ ธ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
๐ 2. ์ง์ญ๋ณ์๋ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ๋ผ.
์ด๊ธฐํ์ ํ์ํ ์ ๋ณด๊ฐ ์ถฉ๋ถํ์ง ์๋ค๋ฉด ์ถฉ๋ถํด์ง ๋๊น์ง ์ ์ธ์ ๋ฏธ๋ค์ผ ํ๋ค. try-catch ๋ฌธ์ ๊ฒฝ์ฐ ๋ณ์ ๊ฐ์ try ๋ธ๋ก ๋ฐ๊นฅ์์๋ ์ฌ์ฉํด์ผ ํ ์๋ ์์ผ๋ฏ๋ก ์์ธ๋ค.
๐ 3. ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ผ.
๋ฐ๋ณต๋ฌธ์ ๋ ํนํ ๋ฐฉ์์ผ๋ก ๋ณ์ ๋ฒ์๋ฅผ ์ต์ํํด์ค๋ค. ๋ฐ๋ณต ๋ณ์์ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋ ๋ค์๋ ์จ์ผ ํ๋ ์ํฉ์ด ์๋๋ผ๋ฉด while๋ฌธ๋ณด๋ค๋ for ๋ฌธ์ ์ฐ๋ ํธ์ด ๋ซ๋ค.
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๋ฉด while๋ฌธ์์ ๋ฐ์ํ๋ '๋ณต์ฌํด ๋ถ์ฌ๋ฃ๊ธฐ ์ค๋ฅ'๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์๋๋ while๋ฌธ์์์ '๋ณต์ฌํด ๋ถ์ฌ๋ฃ๊ธฐ ์ค๋ฅ'๋ค.
Iterator<Element> i = c.iterator();
while(i.hasNext()) {
doSomething(i.next());
}
...
Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { // ๋ฒ๊ทธ!!
doSomething(i2.next());
}
์๋ก์ด ๋ฐ๋ณต ๋ณ์ i2๋ฅผ ์ด๊ธฐํํ์ง๋ง, ์ค์๋ก ์ด์ while ๋ฌธ์์ ์ด i๋ฅผ ๋ค์ ์ด ๋ฌธ์ ๋ค.
for๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์ค๋ฅ๋ฅผ ์๋์ ๊ฐ์ด ์ปดํ์ผ ํ์์ ์ก์์ค๋ค.
for(Iterator<Element> i = c.iterator(); i.hasNext();) {
Element e = i.next();
...
}
...
// "i๋ฅผ ์ฐพ์ ์ ์๋ค"๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ธ๋ค.
for(Iterator<Element> i2 = c2.iterator(); i.hasNext();) {
Element e2 = i2.next();
...
}
๋ํ, ๋ณ์ ์ ํจ ๋ฒ์๊ฐ for๋ฌธ ๋ฒ์์ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ฌ๋ฌ ๋ฐ๋ณต๋ฌธ์์ ์จ๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค๋ ์ด์ ์ด ์๋ค.
์ถ๊ฐ์ ์ผ๋ก ๋ฐ๋ณต๋ฌธ ๊ด์ฉ๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต ๋๋ง๋ค ๋ค์ ๊ณ์ฐํด์ผ ํ๋ ๋น์ฉ์ ์ค์ผ ์ ์๋ค.
for(int i = 0; n = expensiveComputation(); i < n; i++) {
...
}
์์ ์ฝ๋์์์ฒ๋ผ ๋ณ์ i์ ํ๊ณ๊ฐ์ n์ ์ ์ฅํ์ฌ ๋ฐ๋ณต ๋๋ง๋ค ๋ค์ ๊ณ์ฐํด์ผ ํ๋ ๋น์ฉ์ ์์ด๋ค.
๐ 4. ๋ฉ์๋๋ฅผ ์๊ฒ ์ ์งํ๊ณ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ง์คํ๋ผ.
ํ ๋ฉ์๋์์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ค๋ฉด ๊ทธ์ค ํ ๊ธฐ๋ฅ๊ณผ๋ง ๊ด๋ จ๋ ์ง์ญ๋ณ์๋ผ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋์์ ์ ๊ทผํ ์ ์์ ๊ฒ์ด๋ค. ๋ฉ์๋๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ์ชผ๊ฐ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ํ์.
ํด๋น ๊ธ์ Joshua Bloch ๋์ 'Effective Java 3/E'๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.