[Java] Iterable 과 Iterator 차이

Iterable 과 Iterator 차이
출처 : https://m.blog.naver.com/PostView.nhn?blogId=writer0713&logNo=220877874725&proxyReferer=https:%2F%2Fwww.google.com%2F

 

List, Set, Queue => Collection => Iterable 순서로 implements 하고있다.

Iterable 인터페이스 안에는 iterator 메소드가 추상메소드로 선언되어 있으며,

Collection 인터페이스 계층구조에서 List, Set, Queue를 구현하는 클래스는 다 iterator 메소드를 가지고 있다.

Iterable의 역할은 iterator() 메소드를 하위 클래스에서 무조건 구현하게 하기 위함이다.

 

1. Iterator란

자바 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법으로 Iterator 인터페이스 표준화하고 있다.

Iterable 과 Iterator 차이

Iterator 인터페이스의 내부는 위와 같이 구현되어있으며 hasNext(), next(), remove() 메소드를 사용할 수 있다.

  • hasNext() : Iterator 안에 다음 값이 있는지 확인하고 true, false 반환
  • next() : iterator의 다음 값 가져오기
  • remove() : iterator.next()로 가져온 값을 컬렉션에서 삭제

주로 값을 가져오거나, 삭제할 떄 사용한다.

List의 경우 순서가 있기 때문에 Iterator를 사용하지 않고 get(i) 메소드 활용이 가능하며,

Set 인터페이스의 경우 get(i) 메소드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회 할 수있다.

대량의 데이터를 제어할 시 속도가 느리며, 값의 변경이나 추가가 불가능 하다.

2. 차이점

  • Iterable : 순회할 수 있는 개체
  • Iterator : next메소드를 호출하면 {done: boolean, vlaue}를 반환하는 오브젝트, 객체 그자체
Iterator 이터레이터 Iterable 이터러블
.next() 메소드, 바로 앞/뒤 값만을 가져올 수 있다. 랜덤 Access가 가능하다.
기능이 배열에 비해 상대적으로 적다 -> 가볍다 기능이 많다 -> 무겁다
메모리 효율적이다 메모리 사용량이 많다.

댓글

Designed by JB FACTORY

1 2 3 4 5 6 7 8 1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10