본문 바로가기

컴퓨터공학/Java

CS> Enumeration 과 Iterator 의 차이점

 공통점

자바 컬렉션에 대해서 각 항목을 순차적으로 접근하기 위해서 디자인되었다. 

자바는 Iterator를 standard한 것으로 보고 있고 권장하고 있다.

Enumeration은 초기에 나와서 벡터나 해쉬테이블 등 초기 타입의 collection만 지원한다. 

Iterator는 JDK 1.2 부터 소개되어서 모든 collection 객체를 지원한다.

 

snap shot이란 원본과 별개로 사본을 남겨서 처리한다.  

따라서 enumeration으로 순차적 처리를 하는 도중에 다른 사람이 collection에 insert나 delete를 한다면

원래 자료와 enumeration의 데이터 사이에 예외사항을 인지 못하고 불일치가 생길 수 있다.

 

Iterator는 별도 snap shot을 만들지 않고 Collection 원본 데이터에 직접 access 한다.

그래서 Iterator 이용하여 순차 접근하는 도중에 다른 곳에서 해당 collection 데이터를 추가 삭제하면 concurrent modification exception 이라는 에러가 발생한다. 이런식으로 순차적 접근이 실패하면 예외를 발생하는 방법을 Fail fast라고 한다. 

Enumeration이나 Iterator 모두 이름은 다르지만 같은 기능을 갖고 있는 method가 있다. 

Enumeration Iterator
초기 Collection 만 지원 모든 Collection 지원
Snap Shot  Fail fast, Concurrent Modification Exception
hasMoreElements(), nextElement() hasNext(), next(), remove()

 

정리

Enumeration 

a few collection suport

snap shot

Iterator 

all collection support

fail fast 

remove() method

 

 

 

참고자료

 

 

 

 

[Java] Enumeration 과 Iterator (tistory.com)

 

[Java] Enumeration 과 Iterator

컬렉션 내의 데이터에 접근하기 위한 가장 일반적인 방법은 Enumeration과 Iterator를 사용하는 것이다. Enumeration과 Iterator의 모든 데이터를 마지막에 상관하지 않고 접근할 수 있다는 특징이 있다. 1.

searchstory.tistory.com