34장: Iterable

이터러블

이터레이션 프로토콜은 iterable 데이터 컬렉션(자료구조)을 만들기 위해 ES6에서 도입되었다.

이전에는 통일된 규약 없이, 각자 나름의 구조를 가지고 for 문, for...in 문, forEach 메서드 등 다양한방법으로 순회할 수 있었다.

  • Iterable protocol

    • 이 프로토콜을 준수한 객체를 이터러블 이라고 한다

    • 빌트인 Iterable 종류 (linkarrow-up-right)

      • String, Array, TypedArray, Map, Set, and Segments

    • Symbol.iterator 를 프로퍼티 key로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 객체이다.

    • for...of 문 으로 순회할 수 있으며 스프레드 문법배열 디스트럭처링 할당의 대상으로 사용할 수 있다.

    • Symbol.iterator 메서드를 직접구현하지 않거나 상속받지 않은 일반객체는 이터러블 프로토콜을 준수한 이터러블이 아니다.

  • Iterator protocol

    • 이터러블의 Symbol.iterator 메서드를 호출하면 iterator를 반환한다

    • next 메서드 소유

      • value와 done 프로퍼티 반환

  • iterable 과 iterator 차이 (원문링크arrow-up-right)

    • iterable은 iterator를 리턴하는 [Symbol.iterator]() 를 가진 값

    • iterator는 {value, done} 객체를 리턴하는 next() 를 가진 값입니다.

Iterable

참고

2021/01 현재, 일반객체도 스프레드 문법 사용을 허용하도록 제안되었다.

Iterator

빌트인 이터러블

  • for...in

    • 객체의 프로토타입 체인상에 존재하는 모든프로토타입의 프로퍼티중에서 프로퍼티 어트리뷰트 [[Enumerable]] 의 값이 ture인 프로퍼티를 순회하며 열거한다. 이때 프로퍼티 키가 Symbol인 프로퍼티는 열거하지 않는다.

  • for...of

    • 내부적으로 이터레이터의 next 메서드를 호출하여 이터러블을 순회하며 next 메서드가 반환한 이터레이터 result 객체의 value 프로퍼티값을 for..of문의 변수에 할당한다. 그리고 이터레이터리절트 객체의 done 프로퍼티 값이 false 이면 이터러블의 순회를 계속하고 true이면 중단한다.

for ... of 문의 내부동작을 for 문으로 표현하면 다음과 같다.

유사 배열 객체

유사 배열 객체 이터러블이 아닌 일반 객체이다.

이터레이션 하는법

참고

ES6 이후 arguments, NodeList , HTMLCollection 에는 Symbol.iterator 메서드가 추가되었기에, 이터러블이 가능하다.

유사 배열 객체에서 for of 를 사용하려면

사용자 정의 이터러블

이터레이션 프로토콜을 준수하지 않는 일반 객체도 이터레이션 프로토콜을 준수하도록 구현하면 사용자 정의 이터러블이 된다.

이 이터러블은 스프레드 문법배열 디스트럭처링에도 사용될 수 있다.

이터러블이면서 이터레이터인 객체를 만드려면,

Last updated