티스토리 뷰

카테고리 없음

[js] iterator와 iterable

실전압축코딩 2023. 7. 10. 22:37

https://poiemaweb.com/es6-iteration-for-of

 

-ES6에서 도입된 이터레이션 프로토콜(iteration protocol)은 데이터 컬렉션을 순회하기 위한 프로토콜(미리 약속된 규칙)이다.

 

- iterable은? iterable 프로토톨을 준수한 객체 ->  Symbol.iterator 메소드를 구현하거나 프로토타입 체인에 의해 상속한 객체를 말한다. Symbol.iterator 메소드는 이터레이터를 반환한다. 

 

- iterable한 객체는 spread 문법(...) 을 사용 할 수 있고, for of 문을 사용해 순회 할 수 있다.

 

- 배열은 Symbol.iterator 메소드를 소유한다. 따라서 배열은 이터러블 프로토콜을 준수한 이터러블이다.

 

- 배열[Symbol.iterator]() 사용시 return 한 iterator 객체는 next() 메서드를 가지고 있으며  iterable하다. (제네레이터도 포함)

일반 객체는 Symbol.iterator 메소드를 소유하지 않는다. 따라서 일반 객체는 이터러블 프로토콜을 준수한 이터러블이 아니다.

 

- iterator의 next() value, done 프로퍼티를 갖는 이터레이터 리절트 객체를 반환.(제네레이터에서 yield로 구현 가능)

 

- 문자열도 이터러블 이다! argment 객체 역시 iterable이다.

 

- 이터러블은 데이터 공급자(Data provider)의 역할을 한다.

 

- 즉, 이터레이션 프로토콜은 다양한 데이터 소스가 하나의 순회 방식을 갖도록 규정하여 데이터 소비자가 효율적으로 다양한 데이터 소스를 사용할 수 있도록 데이터 소비자와 데이터 소스를 연결하는 인터페이스의 역할을 한다.

 

-  이터러블 하면서 이터레이터 이다? Symbol.iterator 메서드를 가지고 있으면서(이터러블), next() 메서드를 가지고 있다. (이터레이터)