기록과 정리

Iterable과 Iterator 본문

IT/Java

Iterable과 Iterator

zepetto 2022. 2. 18. 09:26

이름이 이 두 개념에 대해 질문을 받았고 확실한 대답을 하지못하였기에 정리를 하려고 한다. 써봤을 법한 이름이지만 정확히 정리를 해보도록하자.

 

Iterable

jdk 1.5 부터 생겨난 interface 이며 "for-each loop" 문(향상된 for문) 에서 대상이 되도록 도와준다. 두 개의 default 메서드와 하나의 abstract(추상)메서드를 가지고 있다. ->

iterable의 메서드들

Collection의 상위 인터페이스이기 때문에 Collection을 상속받는 Set, List 등은 iterable 이 가지고 있는 메서드 iterator를 상속받아 사용할 수 있다.

List에서 iterator 메서드

forEach default 메서드의 경우,  jdk8부터 추가된 디폴트 메서드이다. 해당 forEach 메서드 덕에 stream().forEach 가 아닌 , 컬렉션에서 바로 forEach가 가능하도록 되었다. ( stream을 추가적으로 만드는 비용을 없애줌 )

 

 

Iterator

Iterable 인터페이스의 추상메서드 Iterator와 별개로, Iterator라는 인터페이스가 존재한다. jdk1.2 부터 사용하기 시작했다.
https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

 

Iterator (Java Platform SE 8 )

An iterator over a collection. Iterator takes the place of Enumeration in the Java Collections Framework. Iterators differ from enumerations in two ways: Iterators allow the caller to remove elements from the underlying collection during the iteration with

docs.oracle.com

hasNext, next, remove등의 메서드를 가지고 있으며 Collection 데이터를 하나씩 읽어들어올때 사용한다.

 

Iterable vs Iterator

여기까지 읽으면 Iterable과 큰차이가 없는데 , 사용법에 대해 구분지어 생각해보도록 하자.

 

아까 위에서 말했듯, Iterable 인터페이스를 implement하게 되면 하위 객체는 for-each loop가 가능하게 된다.

Iterator 의 경우 , hasNext, next 메서드들을 이용하여 여러 종류의 컬렉션을 반복하도록 도와준다.

'IT > Java' 카테고리의 다른 글

제네릭(Generic)에 대하여  (0) 2022.02.11
자바의 정석 6장) 객체지향 프로그래밍 1  (0) 2021.12.06
Date와 Time API  (0) 2021.08.31
Java Optional  (0) 2021.08.23
Java8 Stream API (스트림 API)  (0) 2021.08.12