1) 개념
Java에서 Iterator 인터페이스는 Collection 을 조회, 삭제 시 활용하게 됩니다.
Itrator는 반복자라는 의미를 가집니다. 말 그대로 반복을 하게 됩니다. 대상은
Collection이죠.
public class Velog {
List<String> list = Arrays.asList("첫번째", "두번째", "세번째");
Iterator<String> linked = list.interator();
}
2) 사용법
2-1) 조회
전체
조회를 위해서는
for 혹은
while 과 같은 반복과 해당 요소를 불러낼 수 있는 메서드과 활용됩니다.
hasNext()를 통해 반복문을 실행시키고 next()를 통해 해당 요소를 불러오게 됩니다.
여기서
hasNext()는
boolean 자료형을 반환하게 됩니다.
public class Velog {
List<String> list = Arrays.asList("첫번째", "두번째", "세번째");
Iterator<String> linked = list.interator();
while(linked.hasNext()) {
System.out.println(linked.next());
}
}
2-2) 삭제
삭제는 여타 다른 Collection에서 사용하는 remove()메스드를 통해 실행됩니다.
public class Velog {
List<String> list = Arrays.asList("첫번째", "두번째", "세번째");
Iterator<String> linked = list.interator();
while(linked.hasNext()) {
System.out.println(linked.next());
linked.remove();
}
}
3) 사용 이유
사실 조회보다는 삭제에서 사용 이유를 찾을 수 있다고 생각합니다.
일반적인 방식으로 제거하게 되면 ConcurrentNodificationException이 발생하게 됩니다.
해당 오류는
Collection을 실시간으로 삭제하면서 반복문을 사용하게 되면 동시 수정이 발생했다는 의미입니다.
그렇기 때문에
Iterator를 사용하여 조회 및 삭제를 진행하게 됩니다.
이외에도 다음과 같은 이유를 통해 해당 인터페이스를 사용하게 됩니다.
- 일관성과 표준화
: 코드를 일관성 있게 작성하고 여러 켤러렉션 간 코드를 재사용할 수 있도록 합니다.
- 추상화
: 컬렉션 내부 구현에 대한 세부 사항을 숨기는 동시에 실제 데이터에 대한 구조 이해 없이 통제 가능합니다.
- 동적인 크기 처리
: 크기가 동적으로 변화하는 순간에도 조작 가능합니다.
- 메모리 효율성
: 전체 컬렉션을 메모리에 로드하지 않고 데이터를 다룰 수 있기 때문에 효율성을 향상시킵니다.