iteration 개념
반복을 의미
- 반복하려면 반복을 위한 프로토콜 필요
프로토콜
- 통신 프로토콜이 연상됨
약속된 기준과 방법으로 통신
이를 통신 프로토콜(규약) 이라고 함
즉, 프로토콜을 규약
이터레이션 프로토콜
- 배열을 반복하기 위해서는 반복가능한 오프젝트여야하며 반복하기 위한 메서드가 있어야함
이터레이터 구성
이터러블 프로토콜, 반복가능
이터레이터 프로토콜, 반복자
이터러블 프로토콜
- 오프젝트의 반복 동작을 정의
이터러블 오브젝트
이터러블 프로토콜이 설정된 오브젝트
Array, String, TypedArray, Map, et
Arguments, DOM NodeList
조건
- Symbol.iterator() 가 있어야함
- 이터러블 오브젝트에 빌트인으로 설정됨
- 자체 오브젝트에는 없지만 상속 받은 prototype chain에 있어도 됨
- Array를 상속받으면 이터러블 오브젝트가 됨
let arrayObj = [];
let result = arrayObj[Symbol.iterator];
// Symbol.iterator() 존재 여부 체크
오프젝트의 값을 순서로 처리하는 규약
처리는 오브젝트의 next()로 구현
따라서 오브젝트에 next() 가 있으면 이터레이터 프로토콜이 적용된것
let arrayObj = [1,2];
let iteratorObj = arrayObj[Symbol.iterator]();
- Symbol.iterator() 를 호출하면 - 이터레이터 오브젝트를 생성하여 반환
- 우선 이터레이터 오브젝트 생성
- 오브젝트의 next()를 사용할 수 있음
typeof iteratorObj // object
iteratorObj.next // next 존재
iteratorObj.next() // {value:1,done:false}
iteratorObj.next() // {value:2,done:false}
- next()를 호출할때마다 배열의 다음 엘리먼트 값을 반환하는 반복 처리 수행
- 이것이 이터레이터 프로토콜
iteratorObj.next() // {value:undefined,done:true}