Iterator<E> 인터페이스, Iterator<E> 인터페이스에 정의된 메소드, '반복자' 사용 이유

CODEDRAGON Development/Java

반응형

Iterator: 반복자

 

Iterator<E> 인터페이스

·       자바 컬렉션 프레임워크(Java Collections Framework)컬렉션에 저장된 요소를 읽어오는 방법 Iterator 인터페이스로 표준화하고 있습니다.

·       기존 Enumeration을 대체하는 인터페이스로 객체들의 집합을 구성하는 각각의 요소를 순차적으로 추출할 때 사용됩니다. Enumeration과 비교해 메서드명이 개선되었으며 호출측에서 집합의 요소를 삭제할 수 있게 개선되었습니다.

·       , Vector, ArrayList, LinkedList, Set과 같은 어떤 요소를 순차적으로 검색할 때는 java.util 패키지의 Iterator<E> 인터페이스를 사용합니다.

·       Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소에 접근하는데 사용되는 인터페이스 입니다.

·       Enumeration Iterator의 구버전이며, ListIterator Iterator의 기능을 향상시킨 버전입니다.

 

 

iterator( )

Iterator<E> iterator( ) ;

 

·       Collection<E> 인터페이스에는 iterator()라는 이름의 메소드가 위와 같은 형식으로 정의되어 있습니다.

·       컬렉션 프레임워크에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하고 있습니다. 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고 Collection인터페이스에서는 Iterator를 반환(Iterator 클래스의 인스턴스)하는 iterator()메소드 정의하고 있습니다.

·       iterator() 메소드가 반환하는 참조 값의 인스턴스는 Iterator<E> 인터페이스를 구현하고 있습니다.

·       iterator() 메소드가 반환한 참조 값의 인스턴스를 이용하면, 컬렉션 인스턴스에 저장된 인스턴스의 순차적 접근이 가능합니다.

·       iterator() 메소드의 반환형이 Iterator<E>이므로, 반환된 참조 값을 이용해서 Iterator<E>에 선언된 함수들만 호출하면 됩니다.

·       Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있습니다. iterator() Collection인터페이스에 정의된 메서드이므로 Collection인터페이스의 자손인 List Set에도 포함되어 있습니다. 그러므로 List Set인터페이스를 구현하는 컬렉션은 iterator()메소드를 각 각 컬렉션의 특성에 맞게 재정의되어져 있습니다.

·       컬렉션 클래스에 대해 iterator()메소드를 호출하여 Iterator를 얻은 다음 반복문(while)을 사용하여 컬렉션 클래스의 요소들을 읽어 올 수 있습니다.

 

C:\CodeLab\src\java\util\Collection.java


 

 

https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html

public interface Collection<E> extends Iterable<E>{}

 

 

https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

public interface Iterator<E> {

boolean hasNext();

E next();

void remove();

}

 

 

 

'반복자' 사용 이유

·       반복자(Iterator)를 사용하면, 컬렉션 클래스의 종류에 상관없이 동일한 형태의 데이터 참조방식을 유지할 수 있습니다. 따라서 컬렉션 클래스의 교체로 인한 영향이 거의 없습니다.

·       컬렉션 클래스별 데이터 참조방식을 별도로 확인할 필요가 없다는 장점도 있습니다.