Iterator

Iterator는 자바에서 컬렉션 인터페이스를 구현한 클래스의 요소를 순회하는데 사용되는 인터페이스이다.
Iterator 인터페이스를 구현한 클래스는 hasNext()와 next() 메소드를 제공하여 컬렉션 내의 요소들을 차례대로 접근할 수 있게 해준다.

Iterator 인터페이스의 주요 메서드는 다음과 같다.

  • hasNext(): 다음 요소가 있는지 여부를 반환한다.
  • next(): 다음 요소를 반환한다.
  • remove(): 현재 요소를 삭제한다.

Iterator 인터페이스를 사용하면 반복문을 이용해 컬렉션의 요소를 순회할 수 있다.
아래는 ArrayList에서 Iterator인터페이스를 사용하여 요소를 순회하는 간단한 예시 코드이다.

import java.util.ArrayList;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("apple");
        list.add("banana");
        list.add("cherry");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

위의 코드에서는 ArrayList에서 iterator() 메서드를 호출하여 Iterator 인터페이스를 반환하고, 반환된 Iterator를 사용하여 리스트의 요소를 순회하고 출력한다.
이와 같이 Iterator를 사용하면 다양한 컬렉션 타입에서 요소를 순회하고 조작할 수 있다.


네이버 지식백과 내용

iterate는 '반복하다'라는 뜻이고, iterator은 '반복자'라는 뜻이다. 즉 무엇인가 반복할 때 iterator 객체를 사용한다. iterator 객체는 반복하는 데 필요한 첫 번째 요소를 가리키는 메서드, 다음 요소를 가리키는 메서드, 마지막 요소를 가리키는 메서드, 현재 포인터가 가리키고 있는 요소를 반환하는 메서드 등을 포함한다.

iterator 패턴은 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 아래 그림처럼 iterator 객체 속에 넣은 다음, iterator 객체의 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.

반복에 사용되는 자료구조에는 배열, 리스트, Set, Map 등 있다. 이들의 특징은 어떤 데이터의 집합체라는 것이다. 따라서 개별 원소로 여러 가지 작업을 하게 된다. 이때 데이터들의 집합체를 모두 동일한 인터페이스를 사용하여 조작할 수 있게 하면 데이터들의 집합체를 쉽게 사용할 수 있을 것이다. 이 역할을 하는 것이 iterator 패턴이다. 예를 들어 배열의 경우 for 문을 사용하여 변수 i 값을 하나씩 증가시켜 원소들의 값을 조작한다.

iterator 패턴은 바로 값을 1씩 증가시키는 변수 i의 역할을 한다. 즉 변수 i의 역할을 추상화해서 일반화한 것이 iterator 패턴이다. 따라서 iterator 패턴은 배열 등에서 원소를 순서대로 조작하면서 전체를 검색하는 역할을 담당한다.

아래 그림에서 aggregate 인터페이스는 요소들이 나열되어 있는 집합체로서 iterator 메서드를 가지고 있고, 이 메서드는 집합체에 대응하는 iterator를 1개 작성한다. 또 이것을 사용해서 iterator 인터페이스를 실제로 구현한 클래스의 인스턴스(concreteIterator 클래스)를 1개 만들어 집합체를 하나씩 나열하고, 검색하고, 조사하게 된다. 또 concreteAggregate 클래스는 aggregate 역할이 정한 인터페이스를 실제로 구현한다.

출처 : 네이버 지식백과

profile
I'm still hungry.

0개의 댓글