-
- 이터레이션(Iteration)과 for()문의 반복 개념은 차이가 있다.
- 이터레이션을 위한 프로토콜(protocol)이 필요하다.
- 즉, 이터레이션은 프로토콜을 갖고 있으며 프로토콜에 따라 이터레이션이 수행된다.
- 프로토콜이 구문과 빌트인이 아니므로 프로토콜에 맞으면 이터레이션이 가능하다.
이터레이션 프로토콜
- 오브젝트가 이터레이션할 수 있는 구조여야 한다.
- 예: [10, 20]은 가능, 100은 불가능
- 이터레이션 함수를 갖고 있어야 한다.
- 이터레이션 프로토콜은 이터러블(Iterable) 프로토콜과 이터레이터(Iterator) 프로토콜로 구분된다.
- 개발자 코드로 프로토콜을 맞추면 이터레이션 할 수 없는 오브젝트를 이터레이션할 수 있도록 만들 수 있다.
이터러블 프로토콜
- 오브젝트가 반복할 수 있는 구조이어야 하며,
Symbol.iterator
를 갖고 있어야 한다.
- Array, Argument, String, TypedArray, Map, Set, DOM NodeList는 디폴트로 이터러블 프로토콜을 갖고 있다.
이터러블 오브젝트
- 이터러블 프로토콜을 갖고 있는 오브젝트
- 반복 구조,
Symbol.iterator()
을 가지는 오브젝트
- 스펙에서는 @@iterator()로 표기한다.
- 자체 오브젝트에는 없지만 어터러블 오브젝트를 상속받아도 된다.
- 즉, prototype chain(proto)에 있으면 된다.
이터레이터 프로토콜
- 값을 순서대로 생성하는 방법(규약)이다.
- 이터레이터 오브젝트는
- Symbol.iterator()를 호출하면
- 이터레이터 오브젝트를 생성하여 반환한다.
- 이터레이터 오브젝트에 next()가 있다.
- 생성한 오브젝트를 이터레이터라고 부른다.