1. 이터레이터

1-1. 이터러블

이터러블 객체란 반복가능한 객체를 뜻하는 것으로 Symbol.iterator 메서드를 소유한 객체를 말한다.

자바스크립트에선 기본적으로 Symbol.iterator메서드를 소유한 객체를 다음과 같이 정의한다.

Array(배열) 배열의 각 요소를 순회
String(문자열) 문자열의 각 문자를 순회함
TypedArray(타입화 배열) ArrayBuffer를 기반으로 하는 정적 크기의 배열(Int8Array, Uint8Array, Uint8ClampedArray, Int16Array
Map 키-값 쌍으로 저장하는 자료형

이 외에도 Set이나 Arguments 객체가 있지만 중요한건 아니니 일단 넘어가고

이터러블 객체라는건 이터레이터 메서드를 가진 객체를 말하고

그러 for…of문법을 사용할 수 있다는 뜻이다.

1-2. 이터레이터

이터레이터 메서드의 구성은 다음과 같다.

  1. next 메서드
  2. next 메서드는 다음 객체를 리턴한다. { value: 값, done: true/false }
const arr = [1, 2];
const iter = arr[Symbol.iterator]();

console.log(iter.next());
//{value: 1, done: false}
console.log(iter.next());
//{value: 2, done: false}
console.log(iter.next());
//{value: undefined, done: true}

next 메서드가 리턴하는 객체를 이터레이터 객체라고 한다.

for of는 이터레이터 객체를 호출하여 이터러블 객체를 순회한다.

1-3. 기존 반복문들과의 차이점

for 부터 살펴보자면 되게 간단하다. for문은 기본적으로 반복 끝 값을 지정해줘야 한다.

length를 사용하면 간단하지만 이 문법조차 길다.

그래서 for…in 반복문을 가장 많이 사용하게 되는데

for…in 의 경우 열거형(Enumerater) 데이터는 모두 순회할 수 있다. 즉 객체라면 뭐든지 순회가 가능하다.