Iterable과 for...of 계약
iterable/iterator는 Symbol.iterator가 iterator를 돌려주고, next()가 value와 done을 반환하는 명시적 프로토콜이다.
| 계약 요소 | 역할 | 필수 형태 | 실수 신호 |
|---|---|---|---|
| Iterable | 반복 가능한 객체 | Symbol.iterator 메서드 | for...of에서 TypeError |
| Iterator | 다음 값을 알고 있는 객체 | next() 메서드 | 상태가 꼬여 반복 결과가 이상함 |
| next result | 값과 종료 여부 반환 | { value, done } | done 누락 |
| for...of | 프로토콜을 자동 호출 | for (const x of data) | 일반 객체를 바로 반복하려 함 |
| Custom iterable | 직접 반복 규칙 제공 | *[Symbol.iterator]() | 순서와 종료 조건이 불명확 |
반복 문법 뒤에는 값을 하나씩 꺼내는 명시적 계약이 있고, for...of는 그 계약을 사용하는 문법이다.