Iterator 과 Enumeration 모두 java.util 패키지에 포함된 반복자 인터페이스

두 반복자 인터페이스 모두 개별요소를 처음부터 끝까지 순차적으로 넘어가며 개별요소에 접근할 수 있다.

차이점은 Snap-Shot 과 Fail-Fast 지원여부이다.


Enumeration 은 반복을 시작하기전에 원본 데이터에 대한 Snap-Shot 을 찍고 해당 Snap-Shot 에 대한 반복을 시작한다.

즉, 원본데이타의 복사? 사본? 에 대해 반복을 실행한다.

그래서 Enumeration 반복 중에 원본데이타에 수정이 일어나도 아무이상없이 반복을 실행한다.

하지만 Snap-Shot 을 찍을때 생기는 비용과 원본과 Snap-Shot 데이타의 무결성을 확신 할 수 없다.


그래서 JDL1.4 때 Iterator 라는 것을 지원했다.

Iterator 는 Fail-Fast 기능을 지원한다. 

Iterator 은 Snap-Shot 찍지않고, 원본데이타의 콜렉션 객체를 참조하여 반복을 실행하기때문에 원본데이타의 수정이 일어나면 예외를 발생시키고 반복을 중지한다.

반복실행시 데이타의 변경&수정이 발생할 때 데이타 무결성을 지키기 위해서 런타임에러(Runtime-Error)를 발생 시키는 것을 Fail-Fast 라고 한다.


EX) Enumeration

ArrayList<integer> integerList = new ArrayList<integer>();

for (int i = 0; i < 20; i++ ) {

integerList.add(i);

}

Enumeration enum = integerList.elements();

while( enum.hasMoreElements() ) {

system.out.println( enum.nextElement() );

}

EX) Iterator

ArrayList<integer> integerList = new ArrayList<integer>();

for (int i = 0; i < 20; i++ ) {

integerList.add(i);

}

Iterator itr = integerList.iterator();


while( itr.hasNext() ) {

system.out.println( itr.next() );

}


* Iterator 을 사용하는게 좋을거 같다는 생각 '- '



+ Recent posts