top bar

글 목록

2015년 7월 12일 일요일

[JAVA] Iterator

 Iterator는 하나의 객체로서, 객체가 저장된 컨테이너 사이를 이동하면서 각 객체를 선택해 주는 역할을 한다. 이때, 클라이언트 프로그래머는 그 컨테이너의 기반구조에 대해 알거나 신경쓸 필요가 없다.

어떤 종류의 컨테이너로 이루어 졌는지, 예컨데 ArrayList 인지, LinkedList인지, HashSet 인지 알 필요가 없는 것이다. 공통된 인터페이스를 사용하여 컨테이너의 객체들을 선택할 수 있다. 추상화의 대표적인 모델이라고 할 수 있다.

아래는 Iterator의 기본 인터페이스 이다.

메서드
설명
next()
컨테이너의 다음 요소를 반환한다
hasNext()
꺼낼 요소가 있는지 확인한다
remove()
가장 최근에 반환된 요소를 삭제한다. 따라서 next() 메서드를 호출할 때마다 사용할 수 있다.


아래는 next()와 hasNext() 메서드를 사용한 Iterator의 기본 사용 예제이다.
public class IteratorTest {
    
    public static void display(Iterator<String> it) {
        
        System.out.print("[");
        while(it.hasNext()) {
            String s = it.next();
            System.out.print(" " + s + " ");            
        }
        System.out.println("]");
    }
    
    public static void main(String[] args) {    

        List<String> strings = Arrays.asList("A", "B", "C", "D", "E", "F"); // ArrayList
        
        LinkedList<String> stringsLL = new LinkedList<String>(strings);
        HashSet<String> stringHS = new HashSet<String>(strings);
        TreeSet<String> stringsTS = new TreeSet<String>(strings);
        
        display(strings.iterator());
        display(stringsLL.iterator());
        display(stringHS.iterator());
        display(stringsTS.iterator());
    }
}
> 결과
[ A  B  C  D  E  F ]
[ A  B  C  D  E  F ]
[ D  E  F  A  B  C ]
[ A  B  C  D  E  F ]
위의 예제처럼, display() 메서드는 인자로 전달되는 Iterator의 기반 컨테이너 타입을 모른다. 하지만 추상화된 인터페이스를 통해 아주 잘 동작하는것을 볼 수 있다. 이것이 Iterator의 소소하지만 강력함? 이라고 할 수 있을 것이다.

댓글 없음:

댓글 쓰기