향상된 for문이 Iterator를 소비하는 순서

Iterable에서 독립 cursor를 받고 값마다 질문과 전진을 반복한다.

  1. iterator()

    새 Iterator를 만든다

    cursor 0
  2. hasNext()

    다음 원소 존재만 묻는다

    상태 불변
  3. next()

    현재 값을 반환하고 한 칸 간다

    cursor+1
  4. 종료

    hasNext가 false다

핵심: hasNext를 여러 번 불러도 다음 next의 반환값은 달라지지 않아야 한다.