더북(TheBook)

이터레이터는 풀 기반(pull-based) 방식입니다. 즉, 이터레이터의 소비자는 이터레이터에게 다음 대상을 요청해야 합니다. 이 주문형 데이터 모델에는 두 가지 주요 이점이 있습니다. 첫째, 사용 중인 자료 구조에 대한 추상화를 만듭니다. 따라서 본질적으로, 일반적인 반복 메서드의 형태를 띠는 데이터 소스는 다른 것으로 대체하여 사용할 수 있습니다. 둘째, 연산에서 발생하는 데이터에 관한 것으로, 자바스크립트 제너레이터를 이용한 연산이 이에 해당합니다.

예를 들어 무한한 피보나치 수열에 대해서는 호출자가 신경 쓰지 않는 시퀀스 부분을 생성하는 데 시간을 낭비하는 대신에 요청한 숫자만 계산하면 됩니다. 이는 데이터 소스 연산에 비용이 많이 들거나 어려운 경우 대단히 유용합니다. 다음 예제는 제너레이터로 지연 피보나치 계산기를 만듭니다. 여기서 제너레이터는 이터레이터에 불과하므로 각 값은 소비자가 next() 메서드를 호출하거나 요청할 때만 생성됩니다.

예제 2-3 제너레이터로 피보나치 계산기 만들기

function* fibonacci() { -- 제너레이터 함수는 *(별표) 표기법으로 표시합니다.
  let first = 1, second = 1; -- 피보나치 수열은 적어도 두 개의 값과 함께 초기화됩니다.
  for(;;) {
    let sum = second + first;
    yield sum; -- yield는 루프에서 각 중간 단계 결과를 반환합니다.
    first = second;
    second = sum;
  } 
} 
 
const prettyPrint = (item) => console.log(JSON.stringify(item));
const iter = fibonacci(); -- 제너레이터 생성
 
console.log(iter.next()); //-> {value: 2, done: false}
console.log(iter.next()); //-> {value: 3, done: false}
console.log(iter.next()); //-> {value: 5, done: false}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.