JAVA

Iterator: 컬렉션을 안전하게 순회하기

jki09871 2024. 8. 5. 21:03

Java 컬렉션을 다룰 때, 요소를 순회하면서 안전하게 제거하거나 수정할 필요가 종종 있습니다. 이럴 때 유용하게 사용할 수 있는 것이 바로 Iterator입니다. Iterator는 컬렉션의 요소를 순회할 수 있는 표준화된 방법을 제공하여, 요소의 접근과 제거를 안전하고 효율적으로 처리할 수 있도록 합니다. 이번 포스트에서는 Iterator의 개념, 사용 방법, 그리고 주요 기능에 대해 알아보겠습니다.

Iterator란 무엇인가?

Iterator는 Java 컬렉션 프레임워크의 일부로, 컬렉션(예: List, Set, Map 등)의 요소를 순차적으로 접근할 수 있는 객체입니다. Iterator는 다음과 같은 세 가지 주요 메서드를 제공합니다:

  • hasNext(): 컬렉션에 순회할 다음 요소가 있는지 여부를 확인합니다.
  • next(): 컬렉션의 다음 요소를 반환합니다.
  • remove(): Iterator가 마지막으로 반환한 요소를 컬렉션에서 제거합니다.

Iterator의 장점

  • 안전한 요소 제거: Iterator를 사용하면 컬렉션을 순회하면서 요소를 안전하게 제거할 수 있습니다. 이는 for-each 루프나 인덱스 기반 루프를 사용할 때 발생할 수 있는 ConcurrentModificationException을 방지합니다.
  • 일관된 인터페이스: Iterator는 모든 컬렉션에서 동일한 인터페이스를 제공하므로, 다양한 종류의 컬렉션을 일관되게 다룰 수 있습니다.
  • 유연성: 컬렉션의 내부 구조에 관계없이 요소를 순회하고 제거할 수 있습니다.

Iterator 사용 방법

Iterator를 사용하는 기본적인 방법은 다음과 같습니다:

1. Iterator 생성

컬렉션 객체에서 iterator() 메서드를 호출하여 Iterator를 생성합니다.

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

Iterator<String> iterator = list.iterator();

2. 요소 순회

hasNext()와 next() 메서드를 사용하여 컬렉션의 요소를 순회합니다.

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

3. 요소 제거

remove() 메서드를 사용하여 현재 요소를 컬렉션에서 제거할 수 있습니다.

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("banana")) {
        iterator.remove();
    }
}

위 코드에서 Iterator는 "banana" 요소를 안전하게 제거합니다.

Iterator 예제 코드

다음은 Iterator를 사용하여 컬렉션의 요소를 순회하고, 특정 조건에 따라 요소를 제거하는 예제 코드입니다:

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

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

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

        // 요소 순회
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            System.out.println("Current fruit: " + fruit);

            // 조건에 따라 요소 제거
            if (fruit.equals("banana")) {
                iterator.remove();
            }
        }

        System.out.println("Updated fruits list: " + fruits);
    }
}

이 예제에서 "banana" 요소는 조건에 따라 리스트에서 제거됩니다. 최종적으로 업데이트된 리스트는 "apple", "cherry", "date"를 포함합니다.

결론

Iterator는 Java 컬렉션을 순회하고 요소를 안전하게 제거할 수 있는 강력한 도구입니다. 이를 사용하면 컬렉션의 요소를 효율적이고 일관되게 다룰 수 있습니다. Java 컬렉션을 다룰 때 Iterator를 활용하여 코드의 안전성과 유연성을 높여보세요.

'JAVA' 카테고리의 다른 글

자바 람다식 쉽게 이해하기  (1) 2024.09.25
StringBuilder에 대한 가이드  (0) 2024.08.07
쓰레드(Thread)란?  (0) 2024.07.25
객체지향(제네릭(Generic))  (0) 2024.07.24
예외처리(Exception)  (0) 2024.07.24