
🚨🚨🚨🚨
(= 반복 / 순회 가능한 객체 )
☝🏻 iterable (이터러블) : for ...of 등의 문법을 이용하여 각 요소를 반복할 수 있는 객체.
이터러블 프로토콜을 준수한 객체.
이터러블 프로토콜을 준수한다? = Symbol.iterable 을 이미 가지고 있거나 prototype chain을 통해 상속받는 것. 자신 혹은 자신의 prototype 메소드 중 "Symbol.iterable" 메소드가 존재해야만 iterable하다고 말할 수 있음.
( "Symbol.iterable" 메소드가 iterator를 반환하는 역할을 하기 때문에. 그리고 iterator가 있어야 next 메소드를 통해 반복을 수행할 수 있게 되기 때문에. )
generator 함수, 배열, 문자는 모두 prototype method로 "Symbol.iterable"을 가지므로 iterable하다고 말할 수 있다.
✌🏻iterator(이터레이터) : iterable한 객체를 호출했을 때 반환되는 값을 의미. 🌟
iterable 객체의 Symbol.iterator 메소드가 반환하는 객체인 iterator가 되려면 어떤 조건이 필요할까?
iterator의 조건
1. next() 메소드가 자신 혹은 상위 프로토타입 체인에 정의되어 있어야 한다.
2. next 메소드가 호출될 때면 무조건 done 속성과 value 속성을 가지는 객체를 반환해야 한다.
- done 프로퍼티 : 반복이 끝났다면 true, 아니라면 false(혹은 done 프로퍼티를 정의하지 않음)이다.
- value 프로퍼티 : 반복이 끝났다면 undefined(혹은 value 프로퍼티를 정의하지 않음), 아니라면 현재 위치의 요소 값이다.
결국, 특정 iterable 객체에 대하여 반복을 수행한다는 것은 그 iterable 객체의 Symbol.iterator 메소드를 호출하여 iterator 객체를 얻고, 그 iterator 객체의 next() 메소드를 호출하여 요소를 하나씩 꺼내는 것을 의미한다. 이러한 iterable 객체를 이용하는 대표적인 JavaScript 문법이 바로 for ... of 문법이다. + 전개구문, 제네레이터의 *yield
🚨🚨🚨🚨
'javascript' 카테고리의 다른 글
[javascript] 구조 분해 할당 (Destructing assignment) (24) | 2024.03.19 |
---|---|
[javascript] Symbol(심볼)형 (5) | 2024.03.18 |
[javascript] Generator(제너레이터) 함수 (6) | 2024.03.17 |
[javascript] async, await (7) | 2024.03.15 |
[javascript] 유용한 객체 메소드 / 숫자 메소드 총정리 (5) | 2024.03.13 |