본문 바로가기

Java

Iterable와 Iterator에 대해

Iterable

Iterable 인터페이스는 java.lang 패키지에 속하며 반복할 수 있는 데이터 구조를 나타낸다.

Iterable 인터페이스는 Iterator를 생성하는 메서드를 제공한다.

Iterable을 사용할 때 인덱스로 요소를 가져올 수 없으며 데이터 구조에서 첫 번째 또는 마지막 요소도 가져올 수 없다.

Java의 모든 Collection은 Iterable 인터페이스를 구현한다.

 

향상된 for문을 사용하여 Collection 내부의 element들을 반복할 수 있다.

그러나 Iterable 인터페이스를 구현하는 객체만 이러한 명령문 내에서 사용할 수 있다.

List<String> list = getStrings();
list.forEach(System.out::println);

 

Iterator

Iterator는 Java Collections Framework의 구성원이며 java.util 패키지에 속한다.

이 인터페이스를 사용하면 반복 중에 컬렉션에서 요소를 검색하거나 제거할 수 있다.

데이터 구조를 반복하고 해당 요소를 검색하는 데 도움이 되는 next()와 hasNext() 메서드가 제공된다.

그리고 iterator가 가리키는 현재 요소를 제거하는 remove() 메서드가 있다.

마지막으로 forEachRemaining(Consumer<? super E> action) 메서드는 데이터 구조 내부의 나머지 요소 각각에 대해 주어진 작업을 수행한다.

 

Iterable과 Iterator의 차이점

Iterable Iterator
for-each문을 사용하여 반복할 수 있는 컬렉션을 나타낸다. Collection을 반복하는 데 사용할 수 있는 인터페이스를 나타낸다.
Iterable을 구현할 때 iterator() 메서드를 재정의해야 한다. Iterator를 구현할 때 hasNext() 및 next() 메서드를 재정의해야한다.
반복 상태를 저장하지 않는다. 반복 상태를 저장한다.
반복 중에 요소를 제거하는 것은 허용되지 않는다. 반복 중에 요소를 제거하는 것이 허용된다.