1. 이터러블, 이터러블 객체, 이터레이터 이란?
ㅇ 반복 가능 (Iterable, 이터러블, 열거 가능)
- 해당 객체 내 요소들을 하나씩 순환하며,
- 이를 꺼내서 사용(처리) 가능함을 말함
ㅇ 반복 가능 객체 (Iterable Object, 이터러블 객체)
- 그 내부에 반복 가능한 요소들을 갖춘 객체
. 객체 내 값들의 반복 처리 동작을 정의해 둔 객체
- 例)
. (파이썬) 리스트, 튜플, 문자열 등
. (자바스크립트) Array 객체, String 객체, Map 객체, Set 객체 등
ㅇ 반복자 (Iterator, 이터레이터)
- 연속된 반복 값들을 만들어 낼 수 있고, 이들을 하나하나 세밀하게 제어 가능하도록,
. next 메소드를 갖음
- 그 내부에 반복 동작 방법이 정의된 객체
2. [자바스크립트] 이터러블 객체 (Iterable Object)
ㅇ 그 내부에 반복 동작이 정의된, 이터레이터를 반환할 수 있는 객체
- 사실상, 배열 객체를, 보다 일반화시킨 객체로도 볼 수 있음
ㅇ 대표적인 내장 이터러블 객체 例)
- Array 객체, String 객체, Map 객체, Set 객체 등
. 이들 내부에 Symbol.iterator라는 메소드가 구현되어 있어, 반복 동작이 가능함
ㅇ 이터러블 객체의 특징
- 그 내부에 Symbol.iterator 라는 특별한 형태의 함수가 있게 됨
. Symbol.iterator 메소드 이란?
.. 매개변수가 없는 함수 형태로써,
.. 이터레이터를 만들어 반환하는 특별한 함수 임
- 이터레이터(반복자)를 만들어 반환 가능 함
ㅇ 이터러블 객체의 사용처
- for of 문에서, 반복 처리 가능
- 전개 연산자 (...)에서, 사용 가능
. 例) Set 객체에 대해 `전개 연산자 ...`를 사용하는 경우
.. const arr = ['one','two','three','one','two','four'];
.. const s = new Set(arr); // 배열을 중복 없는 Set 객체로 변환
.. console.log([...s]); // => ['one','two','three','four']
- 분할 대입 연산(Destructuring Assignment)에서, 사용 가능
3. [자바스크립트] 이터레이터 (Iterator, 반복자)
ㅇ 주어진 객체 내 요소별로 하나씩 접근하며,
- 반복 처리(이터레이션,Iteration)가 가능한 구조를 갖춘 객체
ㅇ 이터레이터 객체의 특징
* 반복 처리를 단계별로 세밀하게 제어할 수 있도록 만들어진 객체
- next 메소드를 갖음
. next 메소드의 반환값으로 value,done 속성을 갖는 객체를 줌
.. 이 경우 반환되는 것이 요소 값이 아니라,
.. 반복 처리용 프로퍼티를 갖는 반복자 객체임
. 즉, next 반환 객체는, { value : 요소값, done : 논리값 } 임
.. value 프로퍼티 : 꺼낸 값이 이곳에 저장됨 (현재 위치의 요소값)
.. done 프로퍼티 : 반복의 끝인지를 나타내는 논리값
- 만일, 모두 반복 처리하고, 다시 처음부터 하려면,
. 이터레이터를 다시 얻어야 함
ㅇ 반복자 생성 例)
- const iterator1 = array.values();
. 배열 메소드 values()를 사용하여, 반복자 생성
- const iterator2 = array[Symbol.iterator]();
. 이터러블 객체 내 특별한 함수 Symbol.iterator을 키로 하여, 반복자 생성
* 위에서,
. 배열 내 메소드 values() 또는 [Symbol.iterator]의 반환값으로,
. 반복자 (iterator1 또는 iterator2)가 생성 됨
ㅇ 반복자를 통한 순환 例)
- for (let value of mapIterator) { ...}