item 57 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e ์์ดํ 57๋ฅผ ์์ฝํ ๋ด์ฉ ์ ๋๋ค.
์ง์ญ ๋ณ์์ ์ ํจ ๋ฒ์๋ฅผ ์ต์๋ก ์ค์ด๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๊ณ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ ๋ฎ์์ง๋ค.
์ง์ญ ๋ณ์๋ฅผ ์๊ฐ ์์ด ์ ์ธํ๋ค ๋ณด๋ฉด ๋ณ์๊ฐ ์ฐ์ด๋ ๋ฒ์๋ณด๋ค ๋๋ฌด ์์ ์ ์ธํ๊ฑฐ๋, ๋ค ์ด ๋ค์๋ ์ฌ์ ํ ์ด์ ์๊ฒ ๋๊ธฐ ์ฝ๋ค.
public void calculate() {
int a = 1;
int b = 2;
int c = 3;
b = b + c;
c = c + c;
...
a = b + c;
}
public void calculate() {
int b = 2;
int c = 3;
b = b + c;
c = c + c;
...
int a = b + c;
}
์ด๊ธฐํ์ ํ์ํ ์ ๋ณด๋ค ์ถฉ๋ถํ์ง ์๋ค๋ฉด ์ถฉ๋ถํด์ง ๋๊น์ง ์ ์ธ์ ๋ฏธ๋ค์ผ ํ๋ค.
public void calculate() {
Person person = new Person();
...
person.setName("incheol");
person.setAge(20);
}
public void calculate() {
Person person = new Person("incheol", 20);
...
}
๋ฐ๋ณต๋ฌธ์์๋ ๋ฐ๋ณต ๋ณ์์ ๋ฒ์๊ฐ ๋ฐ๋ณต๋ฌธ์ ๋ชธ์ฒด, ๊ทธ๋ฆฌ๊ณ for ํค์๋์ ๋ชธ์ฒด ์ฌ์ด์ ๊ดํธ ์์ผ๋ก ์ ํ๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ณต ๋ณ์์ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋ ๋ค์๋ ์จ์ผ ํ๋ ์ํฉ์ด ์๋๋ผ๋ฉด while ๋ฌธ ๋ณด๋ค๋ for ๋ฌธ์ ์ฐ๋ ํธ์ด ๋ซ๋ค.
๋ค์์ while ๋ฌธ์ ์๋ชป ์ฌ์ฉํ์ฌ ๋ฒ๊ทธ๋ฅผ ๋ฐ์ํ ์ํฉ์ด๋ค.
Iterator<Element> i = c.iterator();
while (i.hasNext()) {
doSomething(i.next());
}
...
Iterator<Element> i2 = c2.iterator();
while (i.hasNext()) {
doSomething(i2.next());
}
๋ ๋ฒ์งธ while ๋ฌธ์๋ ์๋ก์ด ๋ฐ๋ณต ๋ณ์ i2๋ฅผ ์ด๊ธฐํ ํ์ง๋ง, ์ค์๋ก ์ด์ while ๋ฌธ์์ ์ด i ๋ฅผ ๋ค์ ์จ์ ์ฝ๋ ์ปดํ์ผ์ ์ค๋ฅ๊ฐ ์์ง๋ง ํ๋ก๊ทธ๋จ ์ค๋ฅ๊ฐ ๊ฒ์ผ๋ก ๋๋ฌ๋์ง ์์ผ๋ ์ค๋ ๊ธฐ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์ ์๋ ์๋ค.
for ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ํ์์ ์ก์์ค ๊ฒ์ด๋ค.
for (Iterator<Element> i = c.iterator(); i.hasNext()) {
doSomething(i.next());
}
...
// ๋ค์ ์ฝ๋๋ "i๋ฅผ ์ฐพ์ ์ ์๋ค"๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ธ๋ค.
while (Iterator<Element> i2 = c2.iterator(); i.hasNext()) {
doSomething(i2.next());
}
ํ ๋ฉ์๋์์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๋ค๋ฉด ๊ทธ์ค ํ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ์ง์ญ ๋ณ์๋ผ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋์์ ์ ๊ทผํ ์ ์์ ๊ฒ์ด๋ค. ํด๊ฒฐ์ฑ ์ ๊ฐ๋จํ๋ค. ๋จ์ํ ๋ฉ์๋๋ฅผ ๊ธฐ๋ฅ๋ณ๋ก ์ชผ๊ฐ๋ฉด ๋๋ค.
// case1. ํ๋์ ๋ฉ์๋์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ํฌํจํ ๊ฒฝ์ฐ
public void buy() {
// ์์ดํ
์ ๊ฐ๊ฒฉ์ ํ์ธํ๋ค.
// ์์ดํ
์ ํ ์ธ ์ ์ฑ
์ ์ ์ฉํ๋ค.
// ์ฌ์ฉ์์ ๋ณด์ ๊ธ์ก์ ์์ดํ
๊ฐ๊ฒฉ๋งํผ ์ฐจ๊ฐํ๋ค.
}
// case2. ๊ธฐ๋ฅ๋จ์๋ก ๋ฉ์๋๋ฅผ ์ชผ๊ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
public void buy() {
์์ดํ
_๊ฐ๊ฒฉ_ํ์ธ()
์์ดํ
_ํ ์ธ_์ ์ฑ
_์ ์ฉ()
์ฌ์ฉ์_๋ณด์ _๊ธ์ก_์ฐจ๊ฐ()
}
public Long ์์ดํ
_๊ฐ๊ฒฉ_ํ์ธ() {
...
}
public void ์์ดํ
_ํ ์ธ_์ ์ฑ
_์ ์ฉ() {
...
}
public void ์ฌ์ฉ์_๋ณด์ _๊ธ์ก_์ฐจ๊ฐ() {
...
}