< Go Back

[DESIGN_PATTERN] 이터레이터 패턴

DesignPattern

이터레이터 패턴

자료형의 구조와는 상관 없이 데이터를 순회할 수 있도록 해주는 ‘이터레이터’ 인터페이스를 이용하는 패턴.

모든 자료구조를 일관적으로 사용할 수 있다는 점에 장점이 있다.

Java 에서는 Interable<T> 인터페이스와 Iterator<T> 인터페이스를 사용한다.

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

class IteratorTest {

    private static class MyList<T> implements Iterable<T> {

        List<T> store = new ArrayList<>();

        public void add(T item) {
            store.add(item);
        }

        @Override
        public Iterator<T> iterator() {
            return new Iterator<T>() {

                int index = 0;

                @Override
                public boolean hasNext() {
                    return store.size() > index;
                }

                @Override
                public T next() {
                    return store.get(index++);
                }

            };
        }

    }


    public static void main(String[] args) {
        MyList<String> myList = new MyList<>();
        myList.add("Hello");
        myList.add("World");
        myList.add("Boys!");

        for (String text : myList) {
            System.out.println(text);
        }
    }
}

코드에서 볼 수 있듯 Iterable<T> 인터페이스는 Iterator<T> 인터페이스의 구현체를 반환하는 iterator() 메소드를 가지고 있다. 자신이 가지고 있는 아이템을 순회할 수 있는 Iterator<T> 인스턴스를 여기서 반환하면 for 문 등에서 이를 활용해 리스트의 아이템을 순회할 수 있다.

장점

  • 여러 타입의 자료구조를 일관적으로 순회할 수 있다.

단점

  • for문 등을 활용해 직접 순회하는 것보다는 느리다.