Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Iterator와 ListIterator의 차이점 완벽 정리

Java에서 컬렉션(Collection)을 순회할 때 사용하는 대표적인 인터페이스로 IteratorListIterator가 있습니다. 두 인터페이스는 이름이 비슷하지만 지원하는 컬렉션의 종류, 순회 방향, 제공하는 기능에서 뚜렷한 차이를 보입니다. 이 글에서는 두 인터페이스의 특징과 차이점을 자세히 살펴보겠습니다.

Iterator란?

Iterator는 Java 컬렉션 프레임워크에서 가장 기본이 되는 순회자(반복자) 인터페이스입니다. 주요 특징은 다음과 같습니다.

  • 다양한 컬렉션 순회 가능: Map, List, Set 등 대부분의 컬렉션을 순회할 수 있습니다.

  • 인덱스 접근 불가: Iterator는 요소의 위치(인덱스) 정보를 제공하지 않습니다.

  • 요소 수정·교체 불가: 순회 중인 컬렉션의 요소를 수정하거나 교체할 수 없으며, 삭제(remove)만 가능합니다.

  • 단방향 순회: 앞쪽(정방향)으로만 요소를 탐색할 수 있고, 역방향 순회는 지원하지 않습니다.

  • 요소 추가 시 예외 발생: 순회 도중 요소를 추가하면 ConcurrentModificationException이 발생합니다.

  • 제공 메서드: hasNext(), next(), remove() 세 가지 메서드를 제공합니다.

ListIterator란?

ListIterator는 Iterator를 상속한 인터페이스로, 오직 List 계열 컬렉션(ArrayList, LinkedList 등)에서만 사용할 수 있습니다. 주요 특징은 다음과 같습니다.

  • List 전용: List만 순회할 수 있으며, Map이나 Set에는 사용할 수 없습니다.

  • 양방향 순회: 정방향뿐 아니라 역방향으로도 요소를 자유롭게 탐색할 수 있습니다.

  • 인덱스 정보 제공: 현재 위치의 인덱스를 확인할 수 있는 메서드를 제공합니다.

  • 요소 수정·교체 가능: set() 메서드를 통해 순회 중인 요소를 수정하거나 교체할 수 있습니다.

  • 요소 추가 가능: add() 메서드를 사용해 순회 중에도 언제든지 새로운 요소를 추가할 수 있습니다.

  • 제공 메서드: next(), previous(), nextIndex(), previousIndex(), set(), add() 등 다양한 메서드를 제공합니다.

핵심 차이점 요약

구분IteratorListIterator
사용 가능 컬렉션Map, List, SetList만 가능
순회 방향정방향만 가능정방향 + 역방향 모두 가능
인덱스 접근불가능가능 (nextIndex, previousIndex)
요소 수정/추가불가능가능 (set, add)

결론

단순히 컬렉션을 앞에서부터 읽기만 한다면 Iterator면 충분합니다. 반면, List를 다루면서 역방향 탐색이 필요하거나 순회 중에 요소를 수정·추가해야 하는 경우에는 ListIterator를 사용하는 것이 효율적입니다. 상황에 맞는 인터페이스를 선택하면 더 깔끔하고 안전한 코드를 작성할 수 있습니다.