[Java] Iterable 과 Iterator 차이
- 코딩/Java
- 2023. 1. 17.
List, Set, Queue => Collection => Iterable 순서로 implements 하고있다.
Iterable 인터페이스 안에는 iterator 메소드가 추상메소드로 선언되어 있으며,
Collection 인터페이스 계층구조에서 List, Set, Queue를 구현하는 클래스는 다 iterator 메소드를 가지고 있다.
Iterable의 역할은 iterator() 메소드를 하위 클래스에서 무조건 구현하게 하기 위함이다.
1. Iterator란
자바 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법으로 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가 가능하다. |
기능이 배열에 비해 상대적으로 적다 -> 가볍다 | 기능이 많다 -> 무겁다 |
메모리 효율적이다 | 메모리 사용량이 많다. |
'코딩 > Java' 카테고리의 다른 글
스파르타 코딩클럽 비추 이유 | 항해99 (0) | 2023.01.25 |
---|---|
[JAVA] Arrays.asList vs List.of()의 차이 (0) | 2023.01.16 |
[Java] for문 vs forEach문 성능 (0) | 2022.12.02 |
[Java] 자바 코드 실행 시간 구하는 방법 (0) | 2022.12.01 |
[JAVA] e.toString(), e.getMessage(), e.printStackTrace() 예외처리 (0) | 2022.11.19 |