티스토리 뷰

Iterator

iterator를 우리 말로 번역하면 '반복자'로, 객체 지향 프로그래밍에서 배열과 같은 여러 개의 데이터의 집합으로 이루어진 자료구조를 순회하는 객체를 의미한다.

  • iterator를 우리 말로 번역하면 '반복자'입니다.
  • 자바의 Collection에 저장되에 있는 요소들을 순회하는 인터페이스이다.

Collection

Collection이란 자바에서 제공하는 자료구조들의 인터페이스로 List, ArrayList, LinkedList, Set, HashSet, TreeSet, Stack, Queue 등이 이를 상속받고있다. 즉, 이러한 컬렉션 인터페이스를 상속받는 클래스들에 대해 Iterator 인터페이스 사용이 가능하다.

 

Enumeration

Iterator의 전신은 자바 초창기의 Enumeration 인터페이스이다.

 

기능은 Iterator와 마찬가지로 연속적인 요소에 대한 반복 호출이며, hasMoreElements(), nextElements()의 2가지의 메서드를 지원한다. 이는 아래와 같이 Iterator의 2가지 메서드와 대응되는데, 메서드명과 소속 인터페이스만 다를 뿐 구현하는 기능은 동일하다.

 

Iterator Enumeration
hasNext() hasMoreElements()
next() nextElement()

Iterator 메서드

Iterator 인터페이스가 제공하는 메서드는 3가지로 단순하다. 또한, '반복자'라는 이름답게 while, for문과 함께 사용한다.

 

boolean hasNext()

→ 읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다.

 

 Object next()

→ 다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.

 

void remove()

→ next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야한다.

 

예제

Iterator 인터페이스로 요소 읽어오기

public class Ex3 {

	public static void main(String[] args) {
		Collection c = new ArrayList();
		
		c.add("봄");
		c.add("여름");
		c.add("가을");
		c.add("겨울");
		
		Iterator it = c.iterator();
		
		while(it.hasNext()) {
			System.out.println(it.next());
		}

	}

}

 

단, 한번 사용된 Iterator 객체는 재사용이 불가능하다.