[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