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 ์‚ฌ์šฉ์ž_๋ณด์œ _๊ธˆ์•ก_์ฐจ๊ฐ() {
	...
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ