Iterator란?

현서황·2024년 10월 16일
post-thumbnail

Iterator

컬렉션(리스트, 배열 등) 안의 요소들을 순차적으로 접근할 수 있도록 해주는 인터페이스이다. 즉, 컬렉션에 저장된 요소들을 하나씩 꺼내거나 순회할 수 있게 하는 기능을 제공한다.

  • Iterator 인터페이스는 java.util 패키지에 정의되어 있으며, 컬렉션 요소들을 한 번에 하나씩 처리할 수 있게 해준다.
  • Iterator를 사용하면 컬렉션의 내부 구현에 상관없이 요소들을 순회할 수 있다. 즉, 리스트, 집합, 맵 등 여러 데이터구조에서 통일된 방식으로 접근이 가능하다.

Iterator 인터페이스의 주요 메서드

  1. hasNext() :
  • 반환타입: boolean
  • 다음으로 읽을 요소가 있는지 확인
  • 요소가 있으면 true, 더 이상 요소가 없으면 false를 반환
  1. next() :
  • 반환 타입: 컬렉션 안에 저장된 요소의 타입(T)
  • 다음 요소를 반환한다. 호출 시마다 Iterator가 다음 요소도 이동한다.
  • 더 이상 읽을 요소가 없으면 NoSuchElementException을 발생시킨다.
  1. remove()
  • 반환타입: void
  • next()로 반환된 마지막 요소를 컬렉션에서 삭제한다.
  • 이 메서드는 선택적 메서드이며, 일부 구현체에서는 지원하지 않을 수 있다. 예를 들어, remove()를 사용할 수 없는 Iterator에서는 UnsupportedOperationException을 던질 수 있다.

Iterator 동작 예시

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

public class IteratorExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        // Iterator 생성
        Iterator<String> iterator = list.iterator();

        // 요소를 순차적으로 읽기
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

Iterator 사용 이유

  1. 컬렉션의 내부 구현과 상관없이 요소를 접근할 수 있다. 이는 리스트, 집합, 맵 같은 다양한 자료구조를 하나의 방식으로 순회할 수 있게 해준다.
  2. for-each 루프가 나오기 전에는 주로 컬렉션을 순회하는 방법으로 Iterator가 사용되었다. 지금도 for-each루프 내부에서 Iterator가 사용되고 있다.
  3. Iterator는 요소를 삭제할 때 유용하다. 반복 중에 컬렉션의 크기를 변경할 수 있는 유일한 안전한 방법이다.
profile
노는 게 제일 좋은 뽀로로

0개의 댓글