자바(Java)에서 컬렉션의 요소를 순회할 때 사용되는 대표적인 방식으로 Iterator와 Enumeration이 있습니다. 두 인터페이스는 비슷한 역할을 하지만, 기능과 사용 범위에서 중요한 차이점이 있습니다. 이번 글에서는 두 인터페이스의 차이를 자세히 살펴보겠습니다.
Iterator란?
Iterator는 자바 컬렉션 프레임워크에서 제공하는 표준 순회 인터페이스로, 다음과 같은 특징을 가집니다.
범용 커서(Universal Cursor): 모든 컬렉션 클래스에 적용할 수 있습니다.
remove() 메서드 지원: 순회 중에 요소를 안전하게 삭제할 수 있습니다.
레거시가 아닌 최신 인터페이스: JDK 1.2부터 도입된 컬렉션 프레임워크의 일부입니다.
폭넓은 적용 대상: HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet 등 다양한 컬렉션에서 사용할 수 있습니다.
읽기와 수정 모두 가능: 요소를 순회하면서 컬렉션에 대한 변경 작업을 수행할 수 있습니다.
Enumeration이란?
Enumeration은 자바 초기 버전(JDK 1.0)부터 존재해 온 레거시 인터페이스로, 다음과 같은 특징이 있습니다.
범용 커서가 아님: 특정 레거시 클래스에만 적용됩니다.
remove() 메서드 미지원: 요소를 삭제하는 기능이 없습니다.
레거시 인터페이스: 주로 Vector, Hashtable 같은 구버전 클래스에서 사용됩니다.
읽기 전용(Read-Only) 인터페이스: 순회 중 컬렉션의 요소를 수정할 수 없습니다.
제한된 적용 대상: Vector와 Hashtable을 순회하는 데 사용됩니다.
핵심 차이점 요약
| 구분 | Iterator | Enumeration |
|---|---|---|
| 적용 범위 | 모든 컬렉션 클래스 | Vector, Hashtable 등 레거시 클래스 |
| 요소 삭제 | remove() 메서드 지원 | 미지원 |
| 순회 중 수정 | 가능 | 불가능 |
| 인터페이스 유형 | 최신(컬렉션 프레임워크) | 레거시 |
결론
새로운 프로젝트에서는 Iterator를 사용하는 것이 권장됩니다. Iterator는 더 많은 컬렉션을 지원하고, 순회 중 요소를 안전하게 제거할 수 있는 remove() 메서드를 제공하기 때문입니다. 반면 Enumeration은 하위 호환성을 위해 유지되고 있으며, 주로 레거시 코드에서만 사용됩니다.