사전 지식
스프레드 문법
- 하나로 뭉쳐 있는 여러 값들의 집합을 전개하여 개별적인 값들의 목록으로 만드는 것
// ... [1, 2, 3]은 [1, 2, 3]을 개별 요소로 분리한다.(-> 1, 2, 3)
console.log(...[1, 2, 3]); // 1 2 3
consolg.log(...'Hello'); // H e l l o
배열 디스트럭처링 할당(구조 분해 할당)
- 구조화된 배열과 같은 이터러블 또는 객체를
destructuring 하여 1개 이상의 변수에 개별적으로 할당하는것
const arr = [1, 2, 3];
//1, 2, 3을 각각 one, two, three에 개별적으로 할당
const [one, two, three] = arr;
console.log(one, two, three); // 1 2 3
이터레이션 프로토콜
- 순회 가능한 데이터 컬렉션을 만들기 위해 정의한 규칙
- 이터러블 프로토콜
Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환하는 것
- 즉, 이터레이터를 반환하는
Symbol.iterator 메서드 구현되어 있어야 함
- 이터레이터 프로토콜
- 이터러블의
Symbol.iterator 메서드를 호출 시 이터레이터 반환
- 이터레이터의
next 메서드를 호출하면 이터레이터 리절트 객체를 반환
- 즉, 이터레이터 리절트 객체를 반환하는
next 메서드 구현되어 있어야 함

이터러블
- 이터러블 프로토콜을 준수한 객체
- 반복 가능한 객체
Symbol.iterator 를 프로퍼티 키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 객체