반복자(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() : 현재 포인터 인덱스에 해당하는 요소 리턴
등등 다양하게 원하는 기능이 있으면 함수를 추가하면 된다.
참고
- 자바스크립트 디자인패턴
'Programming > Javascript' 카테고리의 다른 글
자바스크립트(Javascript) 디자인패턴 - 전략 패턴 (strategy pattern) (0) | 2020.06.02 |
---|---|
자바스크립트(Javascript) 디자인패턴 - 데코레이터 패턴(decorator pattern)( (0) | 2020.06.02 |
자바스크립트(Javascript) 디자인패턴 - 싱글톤패턴(Singleton Pattern) (0) | 2020.05.29 |
자바스크립트(Javascript) 함수의 기본 패턴들 (콜백, 메모이제이션, 커리) (0) | 2020.05.29 |
자바스크립트(Javascript) 클래스, 생성자, 프로토타입에 대하여 (0) | 2020.05.29 |
댓글