AnnSEo.log

[Deep Dive] 34장 이터러블 본문

자바스크립트

[Deep Dive] 34장 이터러블

AnnSEo2105 2021. 10. 4. 11:02

Iteration protocol

  • iterable protocol: 이 프로토콜을 준수한 객체를 이터러블이라고 한다. 
  • iterator protocol: 이터러블의 Symbol.iterator 메서드 호출 시 이터레이터 프로토콜을 준수한 이터레이터 반환. 

 

Iterable

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

for...of문 순회 가능, 스프레드 문법, 배열 디스트럭처링 할당 가능

 

일반 객체는 Symbol.iterable 메서드를 직접 구하지 않거나 상속받지 않으면 이터러블이 아니므로 위의 3가지 사용 불가.

 

Iterator

이터러블의 Symbol.iterator 메서드가 반환한 이터레이터는 next 메서드를 갖음

next 메서드로 value와 done 프로퍼티를 갖는 iterator result object를 반환. -> 이 객체는 이터러블 요소를 탐색하기 위한 포인터 역할

value: 현재 순회 중인 이터러블의 값

done: 이터러블의 순회 완료 여부

 

표준 빌트인 이터러블

Array, String, Map, Set, TypedArray, arguments, DOM 컬렉션

 

유사 배열 객체

일반 객체여도 length 프로퍼티를 갖으므로 for문 순회 가능, 인덱스인 숫자 형식의 문자열을 프로퍼티 키로 가져 값 접근 가능. 단, for ... of 문 순회 불가

단, argumetns, DOM 컬렉션인 NodeList, HTMLCollection은 유사 배열 객체면서 이터러블이다.

ES6 도입된 Array.from 메서드 -> 유사 배열 객체 또는 이터러블을 인수로 받아 배열로 변환해 반환

 

이터레이션 프로토콜의 필요성

인터페이스로 데이터 소비자가 다양한 데이터 공급자를 사용할 수 있도록 하는 역할

 

사용자 정의 이터러블

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

이터러블은 데이터 공급자 역할을 해 모든 데이터를 메모리에 미리 확보한 다음 데이터를 공급한다. lazy evaluation를 통해 데이터를 생성하는 경우도 있는데 데이터가 필요한 시점 이전까지는 미리 생성하지 않다가 평가 결과가 필요할 때 평가를 하는 기법이다. 지연 평가를 하면 불필요한 데이터를 미리 생성하지 않고 필요한 데이터를 필요한 순간 생성하므로 빠른 실행 속도를 기대할 수 있고 불필요한 메모리를 소비하지 않으며 무한도 표현할 수 있다는 장점이 있다.

'자바스크립트' 카테고리의 다른 글

[Deep Dive] 33장 Symbol  (0) 2021.10.03
[Deep Dive] 28장 Number  (0) 2021.09.26
[Deep Dive] 24장 클로저  (0) 2021.09.19
[Deep Dive] 19장 프로토타입  (0) 2021.09.14
[Deep Dive] 21장 빌트인 객체  (0) 2021.09.12