๐Ÿ“‚ JAVA/์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”

์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ - [8์žฅ. ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™(์•„์ดํ…œ57)]

Amenable 2023. 12. 12. 20:47

  ์ง€์—ญ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œ๋กœ ์ค„์ด๋ฉด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง€๊ณ  ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ์•„์ง„๋‹ค.

  ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ•˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

 

๐Ÿ“™ 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'๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.