πΎ [CS] μ΄ν°λ μ΄ν° ν¨ν΄(Iterator pattern).
1οΈβ£ μ΄ν°λ μ΄ν° ν¨ν΄(Iterator pattern).
- μ΄ν°λ μ΄ν° ν¨ν΄(Iterator pattern)μ μ΄ν°λ μ΄ν°(Iterator)λ₯Ό μ¬μ©νμ¬ μ»¬λ μ
(collection)μ μμλ€μ μ κ·Όνλ λμμΈ ν¨ν΄μ
λλ€.
- μ΄λ₯Ό ν΅ν΄ μνν μ μλ μ¬λ¬ κ°μ§ μλ£νμ ꡬ쑰μλ μκ΄μμ΄ μ΄ν°λ μ΄ν°λΌλ νλμ μΈν°νμ΄μ€λ‘ μνκ° κ°λ₯ν©λλ€.
2οΈβ£ μ΄ν°λ μ΄ν°(Iterator)
- μ΄ν°λ μ΄ν°(Iterator)λ νλ‘κ·Έλλ°μμ 컬λ μ (μ: λ² μ΄, 리μ€νΈ, μ λ±) λ΄μ μμλ€μ μμ°¨μ μΌλ‘ μ κ·Όν μ μκ² ν΄μ£Όλ κ°μ²΄λ₯Ό λ§ν©λλ€.
- μ΄ν°λ μ΄ν°λ μ£Όλ‘ λ£¨νλ₯Ό ν΅ν΄ 컬λ μ μ μμλ€μ νλμ© κ°μ Έμ μ²λ¦¬ν λ μ¬μ©λ©λλ€.
μ΄ν°λ μ΄ν°μ ν΅μ¬ κΈ°λ₯ λ κ°μ§.
-
1.
next()
: μ΄ν°λ μ΄ν°μ λ€μ μμλ₯Ό λ°νν©λλ€. λ€μ μμκ° μμ κ²½μ° μμΈλ₯Ό λ°μμν€κ±°λ νΉμ κ°μ λ°νν μ μμ΅λλ€. -
2.
hasNext()
: λ€μμ κ°μ Έμ¬ μμκ° μλμ§ μ¬λΆλ₯Ό νμΈν©λλ€. λ€μ μμκ° μμΌλ©΄true
λ₯Ό, μμΌλ©΄false
λ₯Ό λ°νν©λλ€.
μμ.
- μλ°μμμ μ΄ν°λ μ΄ν° μ¬μ© μμλ λ€μκ³Ό κ°μ΅λλ€.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
}
}
-
μμ μ½λμμ
list.iterator()
λ₯Ό ν΅ν΄μ 리μ€νΈμ μ΄ν°λ μ΄ν°λ₯Ό μ»κ³ ,while
루νλ₯Ό ν΅ν΄hasNext()
λ‘ λ€μ μμκ° μλμ§ νμΈνλ©΄μnext()
λ₯Ό μ¬μ©ν΄ κ° μμλ₯Ό νλμ© μΆλ ₯ν©λλ€. -
μ΄ν°λ μ΄ν°λ 컬λ μ μ μμλ₯Ό μμ°¨μ μΌλ‘ νμν μ μλ νμ€νλ λ°©λ²μ μ 곡νκΈ° λλ¬Έμ, 컬λ μ μ΄ λ¬΄μμ΄λ μκ΄ μμ΄ λμΌν λ°©μμΌλ‘ μ κ·Όν μ μμ΅λλ€.
- λν, μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©νλ©΄ 컬λ μ λ΄λΆ ꡬνμ μ§μ μ κ·Όνμ§ μκ³ λ μμλ€μ νμν μ μκΈ° λλ¬Έμ 컬λ μ μ μμ ν μ κ·Όκ³Ό μμ μ΄ κ°λ₯ν©λλ€.
3οΈβ£ μλ°μμμ μ΄ν°λ μ΄ν° ν¨ν΄.
- μλ°μμ μ΄ν°λ μ΄ν° ν¨ν΄(Iterator Pattern)μ 컬λ μ λ΄λΆ ꡬ쑰λ₯Ό λ ΈμΆνμ§ μκ³ λ κ·Έ μμλ€μ μμ°¨μ μΌλ‘ μ κ·Όν μ μλλ‘ νλ λμμΈ ν¨ν΄μ λλ€.
- μ΄ ν¨ν΄μ
java.util.Iterator
μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μλ°μ νμ€ λΌμ΄λΈλ¬λ¦¬μμ λ리 μ¬μ©λ©λλ€.
1. κΈ°λ³Έ κ°λ .
- μ΄ν°λ μ΄ν° ν¨ν΄μ 컬λ μ μ λ΄λΆ ꡬ쑰λ₯Ό μ¨κΈ°λ©΄μ μμλ€μ μ κ·Όν μ μκ² ν΄μ€λλ€.
- μ΄ ν¨ν΄μ λ°λ³΅μκ° μ»¬λ μ μμλ€μ μμ°¨μ μΌλ‘ νμν μ μλ λ©μλλ€μ μ μν©λλ€.
2. Iterator μΈν°νμ΄μ€.
- μλ°μ
Iterator
μΈν°νμ΄μ€λ μΈ κ°μ§ μ£Όμ λ©μλλ₯Ό κ°μ§κ³ μμ΅λλ€.-
boolean hasNext()
: λ€μμ μ½μ΄μ¬ μμκ° μλμ§ νμΈν©λλ€. μμΌλ©΄true
, μμΌλ©΄false
λ₯Ό λ°νν©λλ€. -
E next()
: λ€μ μμλ₯Ό λ°ννκ³ , μ΄ν°λ μ΄ν°λ₯Ό λ€μ μμΉλ‘ μ΄λμν΅λλ€. -
void remove()
: μ΄ν°λ μ΄ν°κ° λ§μ§λ§μΌλ‘ λ°νν μμλ₯Ό 컬λ μ μμ μ κ±°ν©λλ€.(μ΄ λ©μλλ μ νμ μΌλ‘ ꡬνλ μ μμ΅λλ€.)
-
3. μ¬μ© μμ.
- λ¨Όμ , 컬λ μ
ν΄λμ€(μ:
ArrayList
,HashSet
λ±)μ μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©νμ¬ μμλ€μ λ°λ³΅ μ²λ¦¬νλ μμλ₯Ό λ³΄κ² μ΅λλ€.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorPatternExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
}
}
4. 컀μ€ν μ΄ν°λ μ΄ν° ꡬν.
- μμ λ§μ 컬λ μ
ν΄λμ€μ κ·Έμ λν μ΄ν°λ μ΄ν°λ₯Ό μ§μ ꡬνν μλ μμ΅λλ€.
- μλ₯Ό λ€μ΄, κ°λ¨ν
Book
컬λ μ κ³Ό κ·Έ μ΄ν°λ μ΄ν°λ₯Ό ꡬνν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, κ°λ¨ν
import java.util.Iterator;
import java.util.NoSuchElementException;
class Book {
private String title;
public Book(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
class BookCollection implements Iterable<Book> {
private Book[] books;
private int index = 0;
public BookCollection(int size) {
books = new Book[size];
}
public void addBook(Book book) {
if (index < books.length) {
books[index++] = books;
}
}
@Override
public Iterator<Book> iterator() {
return new BookIterator();
}
private class BookIterator implements Iterator<Book> {
private int currentIndex = 0;
@Override
public boolean hasNext() {
return currentIndex < book.length && books[currentIndex] != null;
}
@Override
public Book next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return books[currentIntex++];
}
@Override
public void remove() {
throw new UnsupportedOperationException("Remove not supported");
}
}
}
public class Main {
public static void main(String[] args) {
BookCollection bookCollection = new BookCollection(3);
bookCollection.addBook(new Book("The Catcher in th Rye"));
bookCollection.addBook(new Book("To Kill a Mockingbird"));
bookCollection.addBook(new Book("1984"));
for (Book book : bookCollection) {
System.out.println(book.getTitle());
}
}
}
5. λμ μ리.
-
BookCollection
ν΄λμ€λIterable<Book>
μ ꡬννμ¬ μ΄ν°λ μ΄ν° ν¨ν΄μ λ°λ¦ λλ€. -
iterator()
λ©μλλBookIterator
λΌλ λ΄λΆ ν΄λμ€λ₯Ό λ°ννλ©°, μ΄ ν΄λμ€λIterator<Book>
μ ꡬνν©λλ€. -
BookIterator
λhasNext()
,next()
, 그리κ³remove()
λ©μλλ₯Ό ꡬννμ¬ μ»¬λ μ μ μμλ€μ λ°λ³΅ μ²λ¦¬ν©λλ€.
6. λ§λ¬΄λ¦¬.
- μ΄ν°λ μ΄ν° ν¨ν΄μ μ΄μ²λΌ λ΄λΆ ꡬ쑰λ₯Ό κ°μΆκ³ , νμ€νλ λ°©λ²μΌλ‘ 컬λ μ
μ μμλ€μ νμν μ μκ² ν΄μ€λλ€.
- μ΄λ μ½λμ μ¬μ¬μ©μ±κ³Ό μ μ§ λ³΄μμ±μ λμ΄λ λ° κΈ°μ¬ν©λλ€.