목차

Iterator란?
우선 Iterater의 단어뜻만 보면 반복자라는 뜻이다. 이 반복자는 자바의 컬렉션에 저장되어있는 요소들을 순회할떄 사용하는 메서드이다.
하지만 그냥 for문이나 for-each등을 사용하면 안될까?
우선 사용할 수 있지만 사용할 수 없을때도 있다. 또한, 컬렉션에서 간편하고 손쉽게 값을 처리할 수 있다
☑️ Iterator의 구성
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}우선 Iterator 인터페이스를 확인해보면 이렇게 작성되어있다. 보다시피 값을 확인하거나 삭제하는 기능만 존재한다.
하지만 값을 변경하거나 추가하는것은 불가능하다. 컬렉션의 대부분은 get이나 인덱스를 이용해서 값을 확인할 수 있다. 하지만 set의 경우에는 인덱스가 존재하지 않기때문에 값을 확인하기 위해서는 전체를 순회하면서 확인하는 Iterator를 이용해야만 값을 확인할 수 있다. get을 이용해서 값을 불러오는 컬렉션의 경우에도 Iterator를 이용해서 값을 확인할 수 있다.
✔︎ List를 이용한 Itterator 예제
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorExample {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("cherry");
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}⇒ hasNext()와 next() 메서드를 사용하여 컬렉션의 각 요소를 순차적으로 읽고 출력한다.
✔︎ Iterator를 이용해 값을 제거하는 법
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("banana")) {
iterator.remove();
}
}앞서 설명했다시피 Iterator를 이용하면 값을 수정하고 추가하지는 못하지만 확인하고 제거할 수 는 있다고 했다. 이런식으로 사용하면 존재하는 값을 확인하고 삭제 할 수 있다. 컬렉션의 크기나 내부 구현에 상관없이 값을 순차적으로 확인하고 값에 접근해서 제거할 수 있다.
✔︎ Iterator의 장점
- Iterator는 컬렉션의 구체적인 내부 구현과 독립적으로 사용할 수 있으므로, 컬렉션의 변경에 영향을 받지 않는다.
- 컬렉션의 크기나 형태와 관계없이 동일한 방식으로 요소에 접근할 수 있다.
remove()메서드를 통해 요소를 안전하게 삭제할 수 있다.
- 값에 접근만 하는것은 향상된 for문인 for-each를 사용할 수 있지만, iterator를 사용하면 값에 접근하고 제거까지 할 수 있는 동작을 할 수 있다.