Java에서 Iterable과 Iterator는 컬렉션을 순회하기 위해 사용하는 두 가지 중요한 인터페이스이다. 이 두 인터페이스는 밀접하게 연관되어 있으며, 각각의 역할에 따라 순회를 수행한다. 이번 글에서는 Iterable과 Iterator의 차이점과 그 사용법에 대해 자세히 설명하겠다.
1. Iterable 인터페이스
Iterable은 Java에서 반복 가능한 객체를 나타내는 인터페이스이다. Iterable을 구현한 클래스는 for-each문을 사용하여 요소를 순회할 수 있다. Java의 대부분의 컬렉션 클래스(List, Set, Queue 등)가 Iterable을 구현하고 있어, 이러한 클래스들은 손쉽게 for-each문으로 순회할 수 있다.
[주요 메서드]
- Iterator<T> iterator() : Iterable 인터페이스의 핵심 메서드로, 이를 통해 Iterator 객체를 반환한다. 이 메서드를 구현함으로써, 컬렉션 클래스는 반복 가능한 객체로 사용할 수 있게 된다.
import java.util.ArrayList;
import java.util.List;
public class IterableExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// for-each 문을 사용하여 순회
for (String item : list) {
System.out.println(item);
}
}
}
위의 코드에서 list는 Iterable을 구현한 ArrayList이므로 for-each문을 통해 각 요소를 순회할 수 있다. for-each문 내부적으로는 Iterator를 사용하여 순회가 이루어진다.
2. Iterator 인터페이스
Iterator는 컬렉션의 요소를 순차적으로 접근하기 위한 인터페이스이다. Iterator는 Iterable이 제공한 컬렉션을 직접 탐색하며, 각 요소에 접근할 수 있는 방법을 제공한다. Iterator를 사용하면 컬렉션의 각 요소를 직접 제어하며 순회할 수 있다.
[주요 메서드]
- boolean hasNext() : 다음 요소가 있는지 확인한다. 요소가 남아 있으면 true, 아니면 false를 반환한다.
- T next() : 다음 요소를 반환하며, 현재 위치를 다음으로 이동시킨다.
- void remove() : 현재 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> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");
// Iterator를 사용하여 순회
Iterator<String> iter = list.iterator(); // iterator 객체를 얻는다
while (iter.hasNext()) {
String item = iter.next();
System.out.println(item);
}
}
}
위의 코드에서 iterator() 메서드를 호출하여 Iterator 객체를 얻고, while 문을 사용해 hasNext()로 다음 요소가 있는지 확인하면서 next()를 통해 요소를 가져온다.
Iterable과 Iterator의 차이
ㅇIterable: 순회할 수 있는 객체를 의미하며, iterator() 메서드를 통해 iterator를 생성
for-each문을 사용하여 컬렉션을 간결하게 순회할 수 있다
ㅇIterator: 실제로 순회 작업을 수행하는 객체로, 컬렉션의 요소 하나씩 접근 가능
직접 요소를 순회하면서 특정 조건에 따라 요소를 제거하거나 순회 과정을 세밀하게 제어할 수 있다
Iterable과 Iterator는 Java에서 컬렉션을 순회하는 데에 있어 꽤나 중요한 역할을 한다. Iterable은 반복 가능한 객체를 의미하고, Iterator는 그 객체를 순회하며 요소를 가져오는 역할을 수행한다. 이 두 인터페이스를 적절히 활용하면 Java에서 컬렉션을 더욱 효율적이고 가독성 있게 다룰 수 있다. 따라서, 각 인터페이스의 특성과 사용 방법을 잘 이해하고 상황에 맞게 활용하는 것이 중요하다!
(참고) Iterator(반복자) 디자인 패턴
OOP에서 컬렉션의 요소들을 순회할 때 사용되는 디자인 패턴이다. 이 패턴은 컬렉션의 내부 표현 방식을 노출시키지 않으면서도 그 안의 각 요소에 순차적으로 접근할 수 있게 해준다. Iterator 패턴은 컬렉션의 구현과는 독립적으로 요소들을 탐색할 수 있는 방법을 제공하며, 이로 인해 코드의 복잡성을 줄이고 재사용성을 높일 수 있다.
'Language > Java' 카테고리의 다른 글
[Java API] java.util.Collections 메서드 (0) | 2024.10.27 |
---|---|
[Java API] Comparable, Comparator 인터페이스 (0) | 2024.10.25 |
[Java API] Queue, Deque 인터페이스(ArrayDeque, LinkedList) (0) | 2024.09.22 |
[Java API] Stack 클래스(사용하면 안된다) (1) | 2024.09.21 |
[Java API] Map 인터페이스(HashMap, LinkedHashMap, TreeMap) (0) | 2024.09.21 |