///////
Search
💫

Fail-fast iterator는 무엇이고 어떤 것을 위해 사용되는 건가요?

Fail-fast iterator는 무엇이고 어떤 것을 위해 사용되는 건가요?

Fail-fast 시스템은 오류가 발생하면 바로 오류를 알리고 작업을 중단한다.
fail-fast 방식으로 하부 콜렉션에 변경이 발생했을 경우, 신속하고 결함이 없는 상태를 만들기 위해 Iterator의 탐색을 실패한 것으로 하여 예외를 발생하며, 이렇게 함으로써 안전하지 않을지도 모르는 행위를 수행하는 위험을 막기위해 사용한다.

Fail-fast iterator이란?

Fail-Fast systems은 가능한 빨리 실패를 노출하고 전체 작업을 중지하여 작업을 중단한다.
Iterator의 remove() 메소드 이외의 코드로 기존 Collection이 수정되면 Fail-fast iterators는 예외가 발생한다.
Collection은 modCount라는 내부 카운터를 유지한다. Collection에서 항목을 추가하거나 제거 할 때마다 이 카운터가 증가한다.
반복 할 때 각 next() 호출에서 modCount의 현재 값이 초기 값과 비교하고, 불일치가 있으면 전체 작업을 중단시키는 ConcurrentModificationException이 발생한다.
Collection을 반복하는 동안 Iterator의 remove() 메소드를 사용하여 항목을 제거하면 완전히 안전하며 예외가 발생하지 않는다.
그러나 Collection의 remove() 메소드를 사용하여 요소를 제거하면 예외가 발생한다.
ArrayList, HashMap 등과 같은 java.util 패키지의 콜렉션에 대한 기본 반복자는 Fail-Fast
ConcurrentModificationException 발생
Iterator가 순환중에 데이터에 변경이 있으면 Fail-fast 방식일 때 바로 해당 오류를 알리고 작업을 중단한다
반면에 Iterator의 remove() 메서드를 사용하여 제거한다면, 예외를 발생시키지 않는다.
List list = new ArrayList(); list.add("apple"); list.add("banana"); list.add("melon"); Iterator iter = list.iterator(); while(iter.hasNext()) { if("melon".equals(iter.next())) { iter.remove(); } } System.out.println(list);
Java
복사
결과) [apple, banana]
Plain Text
복사