minstudio

반복자 패턴 (Iterator)

반복자 패턴(Iterator Pattern)은 배열(Array), 리스트(List), 해시맵(Map) 등 데이터가 저장된 내부 구조나 원리를 모르더라도 집합 객체 안의 모든 원소들을 통일된 방법으로 차례대로 접근(순회)할 수 있게 해주는 행위 패턴입니다.

Java의 java.util.Iterator (hasNext(), next())가 바로 이 패턴의 구현체입니다. 배열은 `for(int i=0; i표준화된 반복자 인터페이스 하나로 통일하여 클라이언트 코드를 극도로 단순하게 만듭니다.

🔄 Iterator: 자료구조가 달라도 순회 방식은 하나로 통일 Client (클라이언트) while(iter.hasNext()) { print(iter.next()); << Iterator >> hasNext() next() ArrayMenu (배열) return new ArrayIterator() ListMenu (리스트) return new ListIterator() 배열이든 연결리스트든 상관없이, 클라이언트는 hasNext()와 next() 단 두 개로 모든 데이터를 순회합니다.
import java.util.ArrayList;
import java.util.List;

interface Iterator<T> {
    boolean hasNext();
    T next();
}

interface Container<T> {
    Iterator<T> getIterator();
}

class NameRepository implements Container<String> {
    public String[] names = {"Robert", "John", "Julie", "Lora"};

    public Iterator<String> getIterator() {
        return new NameIterator();
    }

    private class NameIterator implements Iterator<String> {
        int index;
        public boolean hasNext() { return index < names.length; }
        public String next() {
            if (this.hasNext()) return names[index++];
            return null;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        NameRepository namesRepository = new NameRepository();

        for (Iterator<String> iter = namesRepository.getIterator(); iter.hasNext();) {
            System.out.println("이름: " + iter.next());
        }
    }
}
반복자 패턴 (Iterator) | Minstudio