[Java]이터레이터(Iterator) 란?
Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다.
컬렉션 프레임워크란 데이터를 저장하는 클래스들을 표준화한 설계이다.
컬렉션 프레임워크는 아래 그림과 같이 데이터를 저장하는 구조에 따라 3가지 인터페이스로 구성된다.
Set, List, Map은 어떤 데이터들의 집합체라고 볼 수 있다.
Set과 List는 데이터의 그룹(Collection)이다.
Set은 순서를 유지하지 않는 데이터 집합이다. 데이터의 중복을 허용하지 않고, HashSet, TreeSet 등이등이 있다.
List는 순서를 유지하는 데이터의 집합이다. 데이터의 중복이 허용되고, LinkedList, ArrayList 등이등이 있다.
Map은 키(Key)와 값(Value)으로 이루어진 데이터의 집합이다. 순서는 유지되지 않으며, 키는 중복을 허락하지 않는다. Map의 클래스로는 TreeMap, HashTable, HashMap등이 있다.
Iterator는 이런 집합체로부터 정보를 얻어낸다고 볼 수 있다. 집합체를 다룰 때는 개별적인 클래스에 대해 데이터를 읽는 방법을 알아야 하기 때문에 각 컬렉션에 접근이 힘들어진다.를 쓰게 되면 어떤 컬랙션이라도 동일한 방식으로 접근이 가능하여 그 안에 있는 항목들에 접근할 수 있는 방법을 제공한다.(다형성)
Iterator 메소드에는 hasNext(), next(), remove()가 있다.
각각의 기능은 다음과 같다.
hasNext() : 읽어올 요소가 남아있는지 확인하는 메소드이다. 요소가 있으면 true, 없으면 false
next() : 다음 데이터를 반환한다.
remove() : next()로 읽어온 요소를 삭제한다.
메소드 호출 순서는 hasNext() -> next() -> remove()이다.
아래는 Iterator를 사용한 예제이다.
리스트에 들어있는 “일”, “월”, “수” 중에서 “수”라는 데이터를 삭제하는 예제이다.
import java.util.ArrayList;
import java.util.Iterator;
public class Practice {
public static void main(String[] args) {
System.out.println("List 생성");
ArrayList list = new ArrayList();
list.add("일");
list.add("월");
list.add("수");
Iterator iter = list.iterator();
while (iter.hasNext() == true) {
String day = (String) iter.next();
if (day == "수") {
iter.remove();
}
System.out.println("Day : " + day);
}
System.out.println("-------------------");
iter = list.iterator();
while(iter.hasNext() == true) {
String day = (String)iter.next();
System.out.println("Day : " + day);
}
}
}