티스토리 뷰

반응형

 

필자가 최근에 주로 포스팅하는

hackerrank challenges 포스팅에서도 알 수 있지만

필자는 값을 받아올 때 보통 for문을 많이 사용한다.

 

 

그런데 hackerrank에서도 기본 소스 코드에

Iterator를 이용해 값을 받아오는 코드가 많은데

 

오늘 Iterator를 쓰는 확실한 이유를 알게 되었다!!

 

다음의 코드를 보자.

import java.util.ArrayList;
import java.util.Iterator;

public class Iterator사용이유 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);
        }
    }
}

 

보통 컬렉션 값을 받아올 때

Iterator를 사용하여

while(it.hasNext()) 를 이용해

값을 많이 받아오는데

while문을 for문으로 바꿔보면 다음과 같이 작성할 수 있다.

 

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class Iterator사용이유 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator it = list.iterator();

        // for문으로 변경
        for(int i=0; i<list.size(); i++) {
            Object obj = list.get(i);
            System.out.println(obj);
        }
    }
}

 

 

근데 여기서 컬렉션을 HashSet으로 변경할 경우

다음과 같이 코드를 작성하면 문제가 발생한다.

 

import java.util.HashSet;
import java.util.Iterator;

public class Iterator사용이유 {
    public static void main(String[] args) {
        HashSet list = new HashSet()    ; // Set은 Collection의 자손
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator it = list.iterator();

        // for문으로 변경
        for(int i=0; i<list.size(); i++) {
            Object obj = list.get(i);
            System.out.println(obj);
        }
    }
}

IDE에서 위 코드를 작성해보면 알겠지만

list.get(i)으로 값을 받아오지 못한다.

 

물론 while문을 통해 iterator를 사용하면

값을 잘 받아올 수 있다!!

 

컬렉션 프레임워크를 사용하다보면

성능 등의 이유로 컬렉션을 바꿔야 하는 경우가 생기는데

for문을 이용해서 arraylist가 가지고 있는 get()메서드를 이용해

값을 가져오게 되면

hashSet으로 컬렉션이 변경되면 코드를 수정해야 한다.

 

⭐⭐⭐

근데 iterator를 사용하면

list, set 상관없이 컬렉션이 바뀌어도

코드를 변경하지 않아도 된다!!

⭐⭐⭐

 


왜 for문으로 컬렉션을 조회하는 것보다

iterator를 사용하는게 좋은지

알게 되었다!!

 

앞으로 낯설더라고 for문 보다는

Iterator를 사용하여

코딩하여야 겠다!!

 

위 내용과 관련된 필자의 포스팅

(링크 클릭시 이동)도 참고하길 바란다.

반응형