자바의 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있습니다. Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메서드를 정의하여 각 요소에 접근하도록 하고 있습니다. 따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스에서도 iterator() 메서드를 사용할 수 있습니다.
- 정리 -
Iterator란? 자바의 컬렉션에 저장되어 있는 요소들을 읽어오는 방법의 인터페이스
즉 컬렉션으로부터 정보를 얻어내는 인터페이스
쉽게 설명하면 책을 보관하는 책장(Collection)이 있고, 그곳에는 책(Collection 안에 들어갈 객체)이 있습니다. 이 책장은 도서관 사서(iterator)가 관리합니다. 사서는 단순 무지한 녀석이라 책장 처음부터 끝까지 한 번에 하나씩밖에 못 가져옵니다.
다음 예제는 리스트를 반복자(iterator)를 사용하여 순회하는 예제입니다.
LinkedList<Integer> lnkList = new LinkedList<Integer>();
lnkList.add(4);
lnkList.add(2);
lnkList.add(3);
lnkList.add(1);
Iterator<Integer> iter = lnkList.iterator();
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
//결과 : 4 2 3 1
Iterator 인터페이스는 다음과 같은 메서드를 사용하여 컬렉션의 각 요소에 접근할 수 있습니다.
메서드 | 설명 |
boolean hasNext() | 해당 이터레이션(iteration)이 다음 요소를 가지고 있으면 true를 반환하고, 더 이상 다음 요소를 가지고 있지 않으면 false를 반환함. |
E next() | 이터레이션(iteration)의 다음 요소를 반환함. |
default void remove() | 해당 반복자로 반환되는 마지막 요소를 현재 컬렉션에서 제거함. (선택적 기능) |
Iterator의 장점과 단점
Iterator 개체를 사용하면 size 메서드를 얻어와서 반복 처리하는 것보다 속도에서 불리합니다. 이는 Iterator 개체를 사용하는 부분이 있기 때문에 불가피한 사항입니다. 하지만 컬렉션 종류에 관계없이 일관성 있게 프로그래밍할 수 있다는 장점을 갖고 있습니다. 소스 코드에 어떠한 컬렉션을 사용할지 정해지지 않았지만 컬렉션 내에 보관한 모든 내용을 출력하는 등의 작업을 먼저 하길 원한다면 Iterator를 사용하는 것은 좋은 선택입니다.
댓글