게시일: 2025년 5월 1일
JavaScript를 작성하는 경우 반복은 자주 실행하는 작업입니다. 배열을 사용하기 위해 루프를 작성하거나 map
, filter
와 같은 함수 프로그래밍 메서드 또는 기타 유사한 메서드를 사용하여 모든 종류의 데이터를 처리합니다.
하지만 이러한 메서드를 사용할 때 한 가지 문제가 있습니다. 배열에서만 사용할 수 있다는 점입니다. 반복 가능한 객체에서 이를 사용하려면 반복 가능한 객체를 배열로 변환한 다음 필요한 메서드를 호출해야 합니다. 이는 낭비가 될 수 있으며, 인터러블이 생성자 함수를 사용하여 무한 데이터 세트를 포함하는 경우에는 불가능합니다. 하지만 이제 반복자 도우미가 새로운 기준으로 제공되므로 모든 브라우저에서 이 기능을 사용할 수 있습니다.
반복자 도우미는 어떻게 작동하나요?
Iterator 도우미는 Iterator
객체의 prototype
에 새 메서드를 정의하여 노출됩니다. 이러한 메서드는 map
, filter
, reduce
및 기타 유사한 메서드와 같이 익숙하게 사용하는 많은 함수 프로그래밍 메서드와 일치합니다.
예를 들어 filter
메서드에서 iterator 도우미를 사용하여 DOM 노드 컬렉션의 innerText
속성 콘텐츠를 기준으로 목록 항목을 필터링할 수 있습니다. 그런 다음 나중에 for
루프에서 사용할 수 있습니다.
const posts = document.querySelectorAll("ul#specific-list > li")
.values()
.filter(item => item.textContent.includes("kiwi"));
// For-of loops can only be used on iterables, which `posts` is!
for (const post of posts) {
console.log(post.textContent);
}
위의 코드 스니펫에서 filter
의 반복자 도우미 메서드는 특정 <ul>
요소의 모든 <li>
요소를 반복하는 데 사용됩니다. 필터링 기준은 각 요소의 텍스트 콘텐츠에 "kiwi"
의 하위 문자열이 포함되어야 한다는 것입니다.
반복자 도우미는 생성자 함수와 함께 사용할 수도 있습니다. 이 예에서는 계승을 계산하지만, 반복자 도우미를 사용하여 값을 8로 나눌 수 있는 값으로 필터링하고 필터링된 처음 5개 값을 콘솔에 로깅하는 생성자 함수를 보여줍니다.
function* factorials (n) {
let result = 1;
for (let i = 1; i <= n; i++) {
result *= i;
yield result;
}
}
const filteredFactorials = factorials(128).filter(x => x % 8 === 0);
console.log(filteredFactorials.next().value);
console.log(filteredFactorials.next().value);
console.log(filteredFactorials.next().value);
console.log(filteredFactorials.next().value);
console.log(filteredFactorials.next().value);
특히 위의 코드 스니펫은 이터레이터 도우미로는 불가능한 작업의 예입니다. 팩토리얼의 수는 무한대이며 배열로 변환할 수 없기 때문입니다.
상황에 따라 반복자 도우미는 많은 잠재력을 발휘할 수 있으며, 다음과 같은 반복 가능한 메서드 각각에 사용할 수 있습니다.
반복자 도우미 사용 사례의 가능성은 무궁무진하며 개발자 작업 환경을 크게 개선할 수 있습니다. 이제 기준점으로 새롭게 제공되므로 시간이 지남에 따라 호환성 문제를 우려하지 않고 사용할 수 있다는 확신이 점점 커질 것입니다. 자세한 내용은 다음 리소스를 확인하세요.