Item 58. For-each Loop
์ ํต์ ์ธ for ๋ฌธ ๋ณด๋ค๋ for-each ๋ฌธ์ ์ฌ์ฉํ๋ผ
์ ํต์ ์ธ for ๋ฌธ์ผ๋ก ์ํํ๊ฒ ๋๋ฉด ๋ถํ์ํ๊ฒ ์ธ๋ฑ์ค ๋ณ์์ ๋ฐ๋ณต์๊ฐ ์ฌ์ฉ๋์ด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ , ์๋ชป ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
๋ฐ๋ณต ๋์์ด ๋ฐฐ์ด์ด๋ Iterable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ผ๋ฉด for-each ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๊ฒฐํ๊ณ ์์ ํ๊ฒ ์ํํ ์ ์๋ค.
๊ฒ๋ค๊ฐ ๋๋ถ๋ถ ์ํฉ์์ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ์ ๋ค.(LinkedList๋ for-each ๋ฌธ์ด ํจ์ฌ ๋น ๋ฆ)
for๋ฌธ ์ฌ์ฉ์ ๋ฒ๊ทธ
for ๋ฌธ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
class Example {
enum Suit {CLUB, DIAMOND, HEART, SPADE}
enum Rank {ACE, DEUCE, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING}
static Collection<Suit> suits = Arrays.asList(Suit.values());
static Collection<Rank> ranks = Arrays.asList(Rank.values());
public static void main(String[] args) {
List<Card> deck = new ArrayList<>();
for (Iterator<Suit> i = suits.iterator(); i.hasNext(); ) {
for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); ) {
deck.add(new Card(i.next(), j.next())); // suit(i) ์ํ๊ฐ rank ์์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ๋ฒ๊ทธ ๋ฐ์
}
}
}
static class Card {
private final Suit suit;
private final Rank rank;
Card(Suit suit, Rank rank) {
this.suit = suit;
this.rank = rank;
}
}
}
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ฐ, ๊ทธ๋๋ง NoSuchElementException
์ด ๋ฐ์ํ์ฌ ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์์ง๋ง, ๊ฐ์๊ฐ ๋ ๋ง์์ ๊ฒฝ์ฐ์ ๋
ผ๋ฆฌ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์์ ๋ ์ฝ๋์ for-each ๋ฌธ์ ์ฌ์ฉํ ์ฝ๋๋ ์๋์ ๊ฐ์๋ฐ, for-each ๋ฌธ์ด ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
class Example {
public static void main(String[] args) {
List<Card> deck = new ArrayList<>();
// ์์
for (Iterator<Suit> i = suits.iterator(); i.hasNext(); ) {
Suit suit = i.next();
for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); ) {
deck.add(new Card(suit, j.next()));
}
}
// for-each ๋ฌธ ์ฌ์ฉ
for (Suit suit : suits) {
for (Rank rank : ranks) {
deck.add(new Card(suit, rank));
}
}
}
}
for-each ๋ฌธ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ ์ํฉ
for-each ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ด ์ธ ๊ฐ์ง ์๋ค.
ํ๊ดด์ ์ธ ํํฐ๋ง(destructive filtering): ์ปฌ๋ ์ ์ ์ํํ๋ฉด์ ์ ํ๋ ์์๋ฅผ ์ ๊ฑฐํด์ผ ํ ๋
๋ณํ(transforming): ๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ๊ทธ ์์์ ๊ฐ ์ผ๋ถ ํน์ ์ ์ฒด๋ฅผ ๊ต์ฒดํด์ผ ํ ๋
๋ณ๋ ฌ ๋ฐ๋ณต(parallel iteration): ์ฌ๋ฌ ์ปฌ๋ ์ ์ ๋ณ๋ ฌ๋ก ์ํํด์ผ ํ ๋๋ ๊ฐ๊ฐ์ ๋ฐ๋ณต์์ ์ธ๋ฑ์ค ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก for-each ๋ฌธ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
Last updated
Was this helpful?