JS Iterator Protocol
[JS Spread Operator](https://texonom.com/js-spread-operator-8c83ee54aba44cd0a97c85511b977a52) 


value 들의 sequence 를 만드는 표준 방법을 정의
객체가 next() 메소드를 가지고 있고, 아래의 규칙에 따라 구현되었다면 그 객체는 iterator

### next()
아래 2개의 속성들을 가진 object 를 반환하는 arguments 없는 함수 :
- `done` (boolean)
> - Iterator(반복자)가 마지막 반복 작업을 마쳤을 경우 `true`. 만약 iterator(반복자)에 *return 값*이 있다면 `value`의 값으로 지정된다. 반환 값에 대한 설명은 [여기](http://www.2ality.com/2013/06/iterators-generators.html#generators-as-threads).
> - Iterator(반복자)의 작업이 남아있을 경우 `false`. Iterator(반복자)에 `done` 프로퍼티 자체를 특정짓지 않은 것과 동일하다.
- `value` - Iterator(반복자)으로부터 반환되는 모든 자바스크립트 값이며 `done`이 `true`일 경우 생략될 수 있다.






