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)를 사용하면, 컬렉션 클래스의 종류에 상관없이 동일한 형태의 데이터 참조방식을 유지할 수 있습니다. 따라서 컬렉션 클래스의 교체로 인한 영향이 거의 없습니다.
· 컬렉션 클래스별 데이터 참조방식을 별도로 확인할 필요가 없다는 장점도 있습니다.
'Development > Java' 카테고리의 다른 글
Container(컨테이너), 컨테이너 클래스의 종류, 컨테이너 종류 및 상속관계, add()메소드 (0) | 2017.10.18 |
---|---|
Container(컨테이너), 컨테이너와 컴포넌트 관계 (0) | 2017.10.18 |
LinkedList 클래스의 주요 메소드 (0) | 2017.10.13 |
Stack 클래스 (0) | 2017.10.13 |
ArrayList<E> vs LinkedList<E> (0) | 2017.10.12 |