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는 그 계약을 사용하는 문법이다.