ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Iterator가 존재하는 이유
    프로그래밍 언어/Java 2021. 1. 6. 19:18

    Iterator

     

    자바를 프로그래밍할 때 Iterator를 사용해본 적은 아마 없는 것 같다. 왜 사용해야하는지도 잘 모르겠고, 코드가 더 복잡해지는 것 같고 손이 더 많이가서 불편하다는 생각이 든다. 그러나 필시 Iterator는 StringBuilder처럼 존재하는 이유가 있을 것이다. 오늘은 그 이유에 대해서 알아보자.

     

    먼저 Iterator를 사용할 수 있는 것은 Collection을 상속받은 클래스들이다. 예를 들면 List, Set, Map, Queue 등이 있다. 다른 자료구조들에서는 get을 하던지, pop을 하던지해서 내부의 데이터를 읽을 수 있다. 그러나 Set에서는 get이 없어서 iterator를 사용하지 않으면 값을 읽어올 수가 없다. (몰랐음) 그러나 그러면 Set에서만 쓰면 되는 거 아닌가? 아니면 Set에도 get을 넣어주지 뭐하는 짓이야? 라고 생각할 수 있다. 하지만 Iterator를 사용함으로써 얻을 수 있는 장점이 있다. 

     

    1. 모든 Collection의 하위 클래스에서 사용가능.

    2. 손쉽게 값을 처리할 수 있음 (get, delete)등

    - 결국은 다형성이다. Map, List, Queue, Set을 다 같은 방법으로 데이터를 처리할 수 있다. 

     

    반면에 단점은 

     

    1. 값 변경, 추가 불가

    2. 단방향 iteration만 가능

    3. Collection의 크기가 크면 성능 저하가 온다. 

     

    Iterator를 사용하면 성능이 좋아지거나하는 그런 꼭 써야하는 이유는 없다. 그렇다면 iterator를 썼을 때 손쉽게 해결할 수 있는 예제를 알아보자.

     

    예를 들어 각각 List, Map, Set, Queue로 이루어진 데이터들의 내용을 print하는 공통함수를 만들고 싶다면 어떻게 해야 할까? 그것은 간단하다.

    public void printCollection(Collection c) {
    	Iterator i = c.iterator();
        
        while (i.hasNext()) {
        	System.out.println(i.next());
        }
    }

     

    그러나 Map은 아시다시피 value들을 print 해줘야하기 때문에 인자를 넘길때 맵 자체를 넘기는 것이 아니라 다음과 같이 넘겨야한다!

    printCollection(map.values());

     

    Iterator가 왜 존재하는지에 대해 알아봤는데 여전히 뭔가가 찝찝하다. 결론은 다형성, 공통 처리를 가능하게 해준다는 것으로 마무리하겠다. 

    '프로그래밍 언어 > Java' 카테고리의 다른 글

    Java - Try Catch문의 오버헤드  (0) 2021.01.04
    Java - String pool이란?  (0) 2021.01.03
    Java - String과 String Builder  (0) 2021.01.03
    Java - Stream이란?  (0) 2021.01.03
    Java - Enum에 대해서 (3, 마지막)  (0) 2021.01.01

    댓글

Designed by Tistory.