728x90
반응형
이터레이션 프로토콜
for...of 루프, spread 연산자와 같은 기능들을 사용하여 순회를 가능하게 하는 규격, 인터페이스
ㄴ 이터레이션 프로토콜을 따르면 이터러블(Iterable)함 : 순회 가능
ㄴ 이터러블한 자료 구조 : Array, String, Map, Set
Iteration protocols - JavaScript | MDN
Iteration protocols aren't new built-ins or syntax, but protocols. These protocols can be implemented by any object by following some conventions.
developer.mozilla.org
이터러블 하기 위해서는?
Symbol.iterator함수를 호출하면 Iterator (반복자) 프로토콜을 따르는 객체를 반환해야함
반복자 프로토콜은 next() 함수를 통해서 다음 값을 호출해야함
- [Symbol.iterator]() : Iterator{ next() : { value, done } }
- value : 현재 순서의 값
- done : 반복이 모두 끝났는지 true, false 값으로 나타내줌
for...of를 사용하면 자동으로 next()함수를 호출해주지만 수동으로 직접 호출할 수 도 있음
Symbol.iterator함수를 가진 객체나, 특정한 함수가 Iterator를 리턴한다는 것은 순회 가능한 객체!
- 사용 예시 :
const array = ['a','b','c'];
for (const item of array) {
console.log(item);
};
//출력값
//a
//b
//c
//next()함수 직접 호출하기
const iteratorExample = array.values();
console.log(iteratorExample.next()); // { value: 'a', done: false }
console.log(iteratorExample.next().value); // b
console.log(iteratorExample.next()); // { value: 'c', done: false }
console.log(iteratorExample.next()); // { value: undefined, done: true }
이터러블 만들기
const multiple = {
[Symbol.iterator]() {
const max = 5;
let num = 0;
return {
next() {
return { value: num++ * 2, done: num > max }
}
}
}
}
for (const num of multiple) {
console.log(num);
//0, 2, 4, 6, 8, 10
}
728x90
'Frontend > JavaScript' 카테고리의 다른 글
[JavaScript] 클릭시 특정 태그 위치로 이동 scrollIntoView (0) | 2023.01.19 |
---|---|
[JavaScript] Intersection Observer (0) | 2023.01.18 |
[JavaScript] 접근자 프로퍼티 (Accessor Property) : 게터, 세터 (0) | 2023.01.13 |
[JavaScript] 클래스 Class, static (0) | 2023.01.12 |
[JavaScript] 자바 스크립트 증감 연산자 a++, ++a 차이 (0) | 2023.01.11 |