일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Chart.js
- JS console
- react
- 공통컴포넌트
- 레이아웃쪼개기
- reactjs
- utilty type
- 타입좁히기
- 성능최적화
- returnType
- NonNullable
- 티스토리꾸미기
- 리액트
- 2022
- 반복줄이기
- javascript
- 폰트적용하기
- 제네릭
- 개발콘텐츠
- const 단언문
- click and drag
- 누구나 자료구조와 알고리즘
- React Native
- vue.js
- typescript
- React.js
- CSS
- 타입스크립트
- 커스텀
- TSDoc
- Today
- Total
몽땅뚝딱 개발자
[Javascript/ES6+] 이터레이션 / 이터러블 / 이터레이터 본문
출처
🚀 이터레이션 / 이터러블 / 이터레이터
1. 이터레이션
◽ 이터레이션
- 사전적 의미는 '반복'이지만, for문의 반복과는 차이가 있다.
[코드 1. for문과 이터레이션]
// for문
const list = [10, 20];
for(let value of list) {
console.log(value);
}
// 이터레이션
const obj = list[Symbol.iterator]();
console.log(obj.next());
console.log(obj.next());
console.log(obj.next());
[실행결과]
10
20
{value: 10, done: false}
{value: 20, done: false}
{value: undefined, done: true}
- 이터레이션을 위한 프로토콜이 필요하며 프로토콜을 갖고있다.
- 빌트인이 아니다. 프로토콜에 맞으면 이터레이션이 가능하다.
◽ 이터레이션 프로토콜의 사용
- 오브젝트가 배열 형태여야 하는 등 이터레이션 할 수 있는 구조여야 한다.
- 이터레이션 함수가 있어야 한다. ex) list[Symbol.iterator]();
- 이터러블(Iterable)/이터레이터(Iterator) 프로토콜 2가지로 나뉜다.
- 개발자 코드로 프로토콜을 맞추면 이터레이션 할 수 없는 오브젝트를 이터레이션 할 수 있도록 만들 수 있다.
ex) 프로퍼티 오브젝트 등
2. 이터러블
◽ 이터러블 프로토콜
- 오브젝트가 반복할 수 있는 구조여야 하며, Symbol.iterator를 갖고 있어야 한다.
- Array, arguments, String, TypedArray, Map, Set, DOM NodeList는 디폴트로 이터러블 프로토콜을 갖고 있다.
◽ 이터러블 오브젝트란?
- 이터러블 프로토콜을 갖고 있는 오브젝트이다.
const list = [10, 20];
console.log(list[Symbol.iterator]);
// 이터러블 오브젝트가 아니기때문에 undefined가 나온다.
const obj = {one: 10, two: 20};
console.log(obj[Symbol.iterator]);
[실행결과]
function values() { [native code] }
undefined
- 자체 오브젝트에는 없지만 이터러블 오브젝트를 상속받아도 된다.
ex) Array 오브젝트를 상속받으면 이터러블 오브젝트가 된다.
3. 이터레이터
◽ 이터레이터 프로토콜
- 값을 순서대로 생성하는 방법, 규약이다.
const list = [10, 20];
// Symbol.iterator 함수를 호출하면 이터레이터 오브젝트를 생성한다.
const obj = list[Symbol.iterator]();
// 이터레이터 오브젝트에 next() 함수가 있다.
// next()를 호출한다 = 이터레이터를 호출한다.
console.log(obj.next());
[실행결과]
// done: 이터레이터로 가져올 값이 남아있는지의 여부
{value: 10, done: false}
{value: 20, done: false}
{value: undefined, done: true} // 더 이상 처리할 값이 없다.
'Development > Javascript' 카테고리의 다른 글
[Javascript/ES6+] Rest / Array-like / Rest와 Arguments의 차이 (0) | 2021.07.07 |
---|---|
[Javascript/ES6+] Spread(전개연산자) (0) | 2021.07.07 |
[Javascript/ES6+] 화살표 함수 (0) | 2021.07.07 |
[Javascript/ES6+] Default Value (0) | 2021.07.07 |
[Javascript/ES6+] Destructuring(구조분해문법) (0) | 2021.07.07 |