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}

results matching ""

    No results matching ""