본문 바로가기

Programming/Java

[Java] Iterable과 Iterator

자료구조를 공부하던 중 Iterable과 Iterator가 나왔다. Iterator는 알고 있었지만 Iterable은 알지 못했기 때문에 정리해보았다.

 


Java 내부의 코드를 살펴보면,
List, Set, QueueCollectionIterable
순서로 extends하는 관계를 가지고 있는 것을 알 수 있다.
Iterable이 무엇이길래 extends 하고 있는지 알아보자.



Iterable

출처 :  https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

 

JAVA API 문서를 보면 Iterable 인터페이스에서 Iterator를 반환하는 iterator()가 메소드로 선언 되어 있음을 볼 수 있다.

 

이를 구현하는 클래스들은 강제적으로 iterator() 메소드를 구현해야 하고, forEachiterator()를 사용할 수 있게 되는 것이다.



Iterator

출처 :  https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

 

Iterator는 Collection에 저장된 요소를 읽어오는 것을 표준화한 것이고, 데이터를 하나씩 읽을 때 사용한다. Iterator를 통해 hasNext(), next() 등의 메소드가 사용이 가능해진다.



정리

Iterable은 하위 클래스에서 iterator()의 생성을 강제하는 역할을 하게 된다. 따라서 Iterable을 상속받은 Collection의 하위 클래스들은 모두 iterator()를 가지고 있게 되며 hasNext(), next()등을 구현하고 있기 때문에 이를 활용할 수 있게 되는 것이다.

forEach 사용 예시

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
for (String str : list)
    System.out.println(str);
// 출력
A
B
C

 

iterator 사용 예시

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));

Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    System.out.println(iter.next());
}
// 출력
A
B
C