반복 계약은 데이터 구조와 실행 제어 수준으로 선택한다

for...of로 읽히게 할지, next를 직접 제어할지, yield로 흐름을 멈출지에 따라 구현 방식이 달라진다.

방식쓸 때장점주의점
Array iteration이미 배열 데이터가 있음map/for...of가 단순중간 상태 제어가 제한적
Iterable object객체를 반복 가능하게 만들고 싶음for...of와 spread 지원Symbol.iterator 구현 필요
Iterator directnext 호출을 직접 제어한 단계씩 진행 가능상태 관리 책임이 큼
Generatoryield로 값을 순차 생산지연 실행과 간결한 문법return/throw 흐름 이해 필요
Async iterable비동기 값이 순서대로 도착for await...of취소와 오류 처리 필요

반복을 설계할 때는 데이터가 이미 있는지, 값을 만들며 진행하는지, 비동기인지부터 나누면 된다.