본문 바로가기
반응형
Programming/Javascript

자바스크립트(Javascript) - 반복자(Iterator) 패턴

by JAMINS 2020. 5. 29.

반복자(Iterator) 패턴은 디자인패턴들 중 하나로 컬렉션와 관계없이 각 요소에 접근할 수 있는 패턴을 말한다. Iterator 패턴은 한번씩은 본 적이 있을 것이다. Java에서 File을 읽어드리면 iterator 형태로 나오는데 next() 와 같은 함수로 각 요소에 접근하여 내부적으로 처리한다. 이는 컬렉션 구조라면 적용이 가능하다. 자바스크립트에서는 어떻게 구현할 수 있는지 간략하게 알아보자.

객체는 일종의 집합적인 데이터를 가진다. 개별 요소에 쉽게 접근할 방법이 필요하다. 객체는 next() 메서드를 제공하고 next()를 연이어 호출하면서 다음 요소에 접근할 수 있다. next()는 해당 요소를 반환한다.

var e;
while (e = agg.next()) {
    // e로 작업
    ...
} 

while (agg.hasNext()) {
    console.log(agg.next());
}

아래와 같이 작성할 수 있다. 사용할 index를 비공개로 들고있어야 한다.

var agg = (function() {
    var index = 0,
        data = [1,2,3,4,5],
        length = data.length;

    return {
        next: function() {
            var element;
            if (!this.hasNext()) {
                return null;
            }

            element = data[index];
            index = index + 1;

            return data[index];
        },
        hasNext: function() {
            return index < length;
        }
    }
})();

여러 차례 반복 순회할 수 있다. 이 구조에서 추가로 메서드를 제공할 수 있다.

  • rewind() : 포인터 처음으로 되돌리기
  • current() : 현재 포인터 인덱스에 해당하는 요소 리턴

등등 다양하게 원하는 기능이 있으면 함수를 추가하면 된다.

참고

  • 자바스크립트 디자인패턴

댓글