반복 계약은 데이터 구조와 실행 제어 수준으로 선택한다
for...of로 읽히게 할지, next를 직접 제어할지, yield로 흐름을 멈출지에 따라 구현 방식이 달라진다.
| 방식 | 쓸 때 | 장점 | 주의점 |
|---|---|---|---|
| Array iteration | 이미 배열 데이터가 있음 | map/for...of가 단순 | 중간 상태 제어가 제한적 |
| Iterable object | 객체를 반복 가능하게 만들고 싶음 | for...of와 spread 지원 | Symbol.iterator 구현 필요 |
| Iterator direct | next 호출을 직접 제어 | 한 단계씩 진행 가능 | 상태 관리 책임이 큼 |
| Generator | yield로 값을 순차 생산 | 지연 실행과 간결한 문법 | return/throw 흐름 이해 필요 |
| Async iterable | 비동기 값이 순서대로 도착 | for await...of | 취소와 오류 처리 필요 |
반복을 설계할 때는 데이터가 이미 있는지, 값을 만들며 진행하는지, 비동기인지부터 나누면 된다.