34장 이터러블

이터레이션 프로토콜

ES6에서 도입된 이터레이션 프로토콜(iteration protocol)은 순회가능한 데이터 컬렉션을 만들기 위한 규칙이다.

ES6이전에는 배열, 문자열, 유사 배열 객체(인덱스와 length가진 객체), DOM 컬렉션 등은 통일된 규약 없이 각자 나름의 구조를 가지고 다양한 방법으로 순회할 수 있었다.

ES6에서부터 드디어 순회가능한 컬렉션들을 하나의 프로토콜로 순회하도록 만들었다. 그게 바로 이터레이션 프로토콜이고, 이 프로토콜을 준수하는 객체를 이터러블이라고 한다.

이터레이션 프로토콜에는 이터러블 프로토콜과, 이터레이터 프로토콜이 있다.

이터러블 프로토콜

Symbol.iterator 를 프로퍼티 키로 사용한 메서드를 직접 구현하거나, 프로토타입 체인을 통해 상속받은 Symbol.iterator를 호출하면, 이터레이터를 반환해야 한다.

이 규약을 이터러블 프로토콜이라고 하며, 이 프로토콜을 준수한 객체를 이터러블이라고 한다.

이터러블은 for...of 문으로 순회할 수 있고,스프레드 문법과 배열 디스트럭쳐링 할당의 대상으로 사용할 수 있다.

이터레이터 프로토콜

이터러블이 Symbol.iterator 메서드를 호출하면 이터레이터를 반환한다. 이터레이터는 next 메서드를 갖고 있고, next 를 호출하면 이터러블을 순회하며 valuedone 프로퍼티를 갖는 이터레이터 리절트 객체를 반환한다. 이러한 규약을 이터레이터 프로토콜이라고 하며, 이 프로토콜을 준수한 객체를 이터레이터라고 한다.

이터러블

이터러블은 for...of 문으로 순회할 수 있으며, 스프레드 문법과 배열 디스트럭쳐링 할당의 대상으로 사용할 수 있다.

const array = [1, 2, 3];

console.log(Symbol.iterator in array); //true

//이터러블  배열을 for...of 문으로 순회하기
for (const item of array) {
  console.log(item);
}

//이터러블에 스프레드 문법 적용하기
console.log([...array]);

//이터러블에 배열 디스트럭쳐링 사용하기
[a, ...rest] = array;

console.log(a, rest);