๐ฃ Java Iteration ๐ฃ
Java์์ Map ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด๋ฉด for๋ฌธ์ ์ฌ์ฉํ ๋ฐฉ๋ฒ๊ณผ iterator๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ 2๊ฐ์ง๊ฐ ์๋ค.
๊ทธ๋ฐ๋ฐ iterator๋ก Map์ ์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ธํ ๋ฆฌ์ ์ด์์๋ ํฅ์๋ for๋ฌธ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค๊ณ ํ๋ค.
์ธํ ๋ฆฌ์ ์ด์์ ์ถ์ฒํ๋๋๋ก enhanced 'for' loop์ผ๋ก ๋ฐ๊ฟ๋ณด๋ฉด ๊ธฐ์กด์ ์์ฑํ for๋ฌธ์ ํ์ฉํ Map ์ํ๋ฐฉ๋ฒ๊ณผ ๋๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ฐ ํฅ์๋ for๋ฌธ์ ์ฌ์ค iterator object๋ฅผ ์ฌ์ฉํด์ ์ํํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ์์๊ฒ ๋ฐ๊ฟ๋์ ๊ฒ์ผ๋ก ๋ณผ ์ ์๋ค. (๋ฌผ๋ก , iterator๋ฅผ ์ฌ์ฉํ๋ฉด ์ํํ๋ ๋์ค์ ์ญ์ ๊ฐ ๊ฐ๋ฅํ์ง๋ง ํฅ์๋ for๋ฌธ์ ConcurrentModificationException์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ํ ๋์ค ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.)
๊ทธ๋์ ํฅ์๋ for๋ฌธ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ์ปดํ์ผ๋ฌ๋
1. ํด๋น ํด๋์ค์ iterator ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ iterator() ๋ฉ์๋๊ฐ ์๋์ง
2. iterator ์ธํฐํ์ด์ค์ hasNext(), next() ๋ฉ์๋๊ฐ ์๋์ง ํ์ธํ๋ค.
Set/List Collection์์ ํฅ์๋ for๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ์ด์ ๋ Set/List์ธํฐํ์ด์ค๋ Collection์ ์์ํ๊ณ Collection์ Iterable์ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ง์ฝ ์ฌ์ฉ์ ์์ฑ ํด๋์ค์ ํฅ์๋ for๋ฌธ์ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด, Set/List์ ๊ฐ์ด Iterable์ ์์๋ฐ์์ผ ํ๋ค.
Iterables๋ iterators๋ฅผ ์์ฑํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ฉฐ, iterable interface๋ฅผ ์์ํ ํด๋์ค๋ iterator๋ฅผ ๋ฐํํ๋ iterator() ๋ฉ์๋๋ฅผ ์ ์ํด์ผ ํ๋ค.
public interface Iterable<T> {
Iterator<T> iterator();
}
Iterators๋ ์ํ๋ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. Iterator๋ฅผ ์์ํ๋ฉด hasNext()์ next() ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
public interface Iterator<T> {
boolean hasNext();
T next();
}
์์ 1
Iterable์ ์์ ๋ฐ๋ Books ํด๋์ค ์์ ๋ฅผ ๋ง๋ค์ด๋ณด์๋ค. Books ํด๋์ค๋ Book ๊ฐ์ฒด๋ฅผ list๋ก ๊ฐ์ง๊ณ ์๋๋ฐ List๊ฐ ์ด๋ฏธ iterator ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ books.iterator()๋ก list๊ฐ ๊ฐ์ง๊ณ ์๋ iterator๋ฅผ ๋ฐํํ ์ ์๋๋ก ํ๋ค.
ํ์ง๋ง Books ํด๋์ค๋ List๋ก Book์ ๊ฐ์ง๊ณ ์์ด์ ๊ตฌํ์ด ์ฌ์ ์ง๋ง iterator() ๋ฉ์๋๋ฅผ ์ง์ ๊ตฌํํด์ผ ๋ ๋๋ hasNext()์ next() ๋ฉ์๋๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.
์์ 2
Book ํด๋์ค๋ฅผ ์กฐ๊ธ ์์ ํ๋๋ฐ ๋ค์ Book ๊ฐ์ฒด์ reference๋ฅผ ๊ฐ์ง๊ณ ์์ next ํ๋๋ฅผ ์ถ๊ฐํ๋ค.
Books ํด๋์ค๋ ๊ธฐ์กด๊ณผ ๋์ผํ์ง๋ง ์์ฑ์๋ก Book ๊ฐ์ฒด๋ฅผ ๋ฐ๊ณ ์๋ก ๋ง๋ BookIterator๋ฅผ ๋ฐํํ๋ค.
Iterator๋ฅผ ์์๋ฐ์ custom BookIterator๋ฅผ ๋ง๋ค์ด์ ์ง์ hasNext()์ next() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด์ฃผ๊ณ ๋๋ฉด
ํฅ์๋ for ๋ฌธ์ ์์ 1๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
1. https://cs61b-2.gitbook.io/cs61b-textbook/12.-inheritance-iv-iterators-object-methods/12.3-iteration
'์คํฐ๋ > ์๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ฌด ํจ์จ์ ์ฌ๋ ค์ฃผ๋ Intellij ๋จ์ถํค (์๋์ฐ ๊ธฐ์ค) (1) | 2024.02.25 |
---|---|
Spring Boot file upload download rest api ์์ - 1 (0) | 2024.02.19 |
์๋ฐ์์ Map ์ํ ๋ฐฉ๋ฒ (0) | 2024.01.27 |
Lambdas and Stream (0) | 2023.01.19 |
Garbage Collection in Java (0) | 2022.10.28 |
๋๊ธ