자바스크립트 이터레이터에서 다음 값 미리보기
문제 상황 설명
자바스크립트에서 이터레이터(iterator)를 사용하다 보면, 현재 값을 처리하는 동안 다음 값을 미리 알고 싶을 때가 있습니다. Stack Overflow에 올라온 질문에서도 이와 같은 상황에 대한 해결책을 찾고 있습니다. 이터레이터의 next() 메서드는 현재 값을 반환하면서 이터레이터를 다음 위치로 이동시키기 때문에, 미리 다음 값을 확인하는 것은 쉽지 않습니다.
해결 방법
이터레이터 래핑
이터레이터를 래핑(wrapping)하여 해결할 수 있습니다. 래핑이라는 것은 기존의 객체나 함수를 확장하거나 추가적인 기능을 부여하는 것을 의미합니다. 아래는 이터레이터를 래핑하는 예제 코드입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function peekableIterator(iterator) {
let next = iterator.next();
return {
peek: function() {
return next.value;
},
next: function() {
let toReturn = next;
next = iterator.next();
return toReturn;
}
};
}
사용 예시
이제 peekableIterator를 사용하여 원래의 이터레이터와 동일한 방식으로 작업을 수행하되, peek 메서드를 사용하여 다음 값을 미리 볼 수 있습니다.
1
2
3
4
5
6
7
const array = [1, 2, 3];
const iterator = array[Symbol.iterator]();
const peekable = peekableIterator(iterator);
console.log(peekable.peek()); // 1
console.log(peekable.next().value); // 1
console.log(peekable.peek()); // 2
주의사항
이 방법은 원래의 이터레이터를 수정하지 않고, 새로운 이터레이터를 생성하는 방식입니다. 따라서 원래의 이터레이터에는 영향을 주지 않습니다.
결론
자바스크립트에서 이터레이터의 다음 값을 미리 보는 것은 기본적으로 제공되지 않지만, 이터레이터를 래핑하는 방법으로 쉽게 해결할 수 있습니다. 이 방법을 사용하면 peek 메서드를 통해 다음 값을 미리 확인할 수 있어, 다양한 상황에서 유용하게 사용할 수 있습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.