더북(TheBook)

기본 이터레이터를 조작하여 모든 객체를 반복할 수 있게 만들 수 있습니다. 이를 보여주고자 ES6 특정 구문을 사용하겠습니다. 숫자 배열을 탐색하고 일정량의 인접 요소를 버퍼링하는 이터레이터 객체를 생각해 봅시다. 여기에서 수행되는 비즈니스 로직은 버퍼링 그 자체로, 그림 2-6과 같이 요소를 그룹화하여 모든 차원의 숫자 집합을 형성하는 데 유용합니다.

▲ 그림 2-6 이터레이터로 크기 2의 숫자 집합 나타내기

 

이제 코드를 살펴보겠습니다. 다음 예제는 버퍼 로직을 포함하는 사용자 정의 이터레이터의 내부 구현을 보여줍니다.

예제 2-2 사용자 지정 BufferIterator 함수

function BufferIterator(arr, bufferSize = 2) { -- 크기 2인 기본 버퍼를 할당합니다.
  this[Symbol.iterator] = function () { -- 제공되는 배열의 이터레이터 메커니즘을 오버라이드합니다. Symbol.iterator는 배열의 이터레이터 함수를 나타냅니다.
    let nextIndex = 0;
 
    return {
      next: () => { -- next() 함수는 이터레이터 인터페이스의 일부이며 반복에서 다음 요소를 지정합니다.
        if(nextIndex >= arr.length) {
          return {done: true}; -- 반복 메커니즘을 멈추는 done = true 속성이 담긴 객체를 반환합니다.
        }
        else {
          let buffer = new Array(bufferSize);
          for(let i = 0; i < bufferSize; i++) { -- 인접 요소를 그룹화하고자 임시 버퍼 배열을 생성합니다.
            buffer[i] = (arr[nextIndex++]);
          }
          return {value: buffer, done: false}; -- 버퍼링된 데이터와 done = false 상태를 반환하는데, 이는 반복 메커니즘이 계속됨을 나타냅니다.
        }
      }
    }
  };
}

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