๋ฐ๋ณต์ ํจํด (Iterator Pattern)
์ปฌ๋ ์
์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋
ธ์ถํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์์์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํ์ ํจํด์
๋๋ค. ์ปฌ๋ ์
์ ๊ตฌํ ๋ฐฉ์๊ณผ ๋ฌด๊ดํ๊ฒ ๋์ผํ ์ธํฐํ์ด์ค๋ก ๋ชจ๋ ์์๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์ปฌ๋ ์
์ ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๋ฉด์ ๋ชจ๋ ์์์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ ์ ๊ณต
โข
์๋ก ๋ค๋ฅธ ์ปฌ๋ ์
๋ค์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋๋ก ํ์คํ๋ ์ ๊ทผ๋ฒ ์ ์
โข
์ปฌ๋ ์
์ ์ํ ๋ก์ง์ ์บก์ํํ์ฌ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ถ๋ฆฌ
ํน์ง
โข
๋จ์ผ ์ฑ
์ ์์น(SRP) ์ค์: ์ํ ์ฑ
์์ ๋ณ๋ ๊ฐ์ฒด๋ก ๋ถ๋ฆฌ
โข
๊ฐ๋ฐฉ-ํ์ ์์น(OCP) ์ค์: ๊ธฐ์กด ์ฝ๋ ์์ ์์ด ์๋ก์ด ์ํ ๋ฐฉ์ ์ถ๊ฐ ๊ฐ๋ฅ
โข
์ปฌ๋ ์
๊ณผ ์ํ ๋์์ ๋ถ๋ฆฌํ์ฌ ๊ฒฐํฉ๋ ๊ฐ์
์์ ์ฝ๋
// Iterator ์ธํฐํ์ด์ค
interface Iterator<T> {
boolean hasNext();
T next();
}
// Collection ์ธํฐํ์ด์ค
interface Collection<T> {
Iterator<T> iterator();
}
// ๊ตฌ์ฒด์ ์ธ ์ปฌ๋ ์
๊ตฌํ
class NumberCollection implements Collection<Integer> {
private Integer[] numbers;
public NumberCollection(Integer[] numbers) {
this.numbers = numbers;
}
@Override
public Iterator<Integer> iterator() {
return new NumberIterator();
}
// ๊ตฌ์ฒด์ ์ธ Iterator ๊ตฌํ
private class NumberIterator implements Iterator<Integer> {
private int index = 0;
@Override
public boolean hasNext() {
return index < numbers.length;
}
@Override
public Integer next() {
return numbers[index++];
}
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์ฝ๋๋ ๋ฐ๋ณต์ ํจํด์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ์ ๋ณด์ฌ์ค๋๋ค:
โข
Iterator ์ธํฐํ์ด์ค: ์ํ์ ํ์ํ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
โฆ
hasNext(): ๋ค์ ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธ
โฆ
next(): ๋ค์ ์์๋ฅผ ๋ฐํํ๊ณ ํฌ์ธํฐ๋ฅผ ์ด๋
โข
Collection ์ธํฐํ์ด์ค: ์ํ ๊ฐ๋ฅํ ์ปฌ๋ ์
์ด ๊ตฌํํด์ผ ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค.
โฆ
iterator(): Iterator ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํ
โข
NumberCollection ํด๋์ค: ๊ตฌ์ฒด์ ์ธ ์ปฌ๋ ์
์ ๊ตฌํํฉ๋๋ค.
โฆ
์ ์ ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ
โฆ
๋ด๋ถ ํด๋์ค๋ก NumberIterator๋ฅผ ๊ตฌํํ์ฌ ์ํ ๊ธฐ๋ฅ ์ ๊ณต
์ด ๊ตฌํ์ ํตํด ํด๋ผ์ด์ธํธ๋ ์ปฌ๋ ์
์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์ ์์ด Iterator ์ธํฐํ์ด์ค๋ง์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์์
// ์ฌ์ฉ ์์
Integer[] numbers = {1, 2, 3, 4, 5};
NumberCollection collection = new NumberCollection(numbers);
Iterator<Integer> iterator = collection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
Java
๋ณต์ฌ