PracticeEveryday
이터레이터 vs 배열 본문
이터레이터 vs 배열
const array = [1, 2, 3, 4];
const iterator = (() => {
let num = 1;
return {
next: () => {
return num > 4 ? { done: true } : { done: false, value: num++ };
},
};
})();
console.log(iterator.next()); // { done:false, value: 1 }
console.log(array); // [1, 2, 3, 4]
console.log(iterator.next()); // { done:false, value: 2 }
- 이터레이터의 경우 생성하면 기본적으로 next 함수 하나만 있다고 생각하면 편하다.
next 함수에는 done과 value 두 항목을 담은 객체를 반환하는데
done은 이터레이터가 끝이 났는지 아직 남았는지를 의미한다.
value는 이터레이터가 아직 순회 중일 때 값을 반환한다.
next 함수 하나만을 지원하기 때문에 이전에 얻어온 value, 다음 value만 가져올 수 있다.
- 반대로 배열의 경우 랜덤 엑세스가 가능하다 ( Index를 통해 !!! )
이터레이터는 배열의 부분집합이다. 배열은 이터레이터의 기능을 포함하기 때문에 이터레이터로 변환 할 수 있다.
반대로 이터레이터가 배열로 변환을 하려면 계산하지 않고 두던 모든 값을 계산해야 한다는 점에서 조금 다르다. (?)
const array = [1, 2, 3, 4];
const iterator = (() => {
let num = 1;
return {
next: () => {
return num > 4 ? { done: true } : { done: false, value: num++ };
},
};
})();
const arr2 = Array.from(iterator);
console.log(arr2); // [1, 2, 3, 4]
console.log(iterator.next()); // { done:false, value: 1 }
console.log(array); // [1, 2, 3, 4]
console.log(iterator.next()); // { done:false, value: 2 }
const arr3 = Array.from(iterator);
console.log(arr3); // [] 빈배열
console.log(iterator.next()); // { done:false, value: 3 }
console.log(iterator.next()); // { done:false, value: 4 }
console.log(iterator.next()); // { done:true }
console.log(iterator); // { next: [Function: next] }
const arr4 = Array.from(iterator);
console.log(arr4); // [] 빈배열
이터레이터를 사용하는 이유
1. 일반적인 경우 배열이 이터레이터보다 무거울 수 밖에 없다.
=> 이터레이터를 사용해도 되는 상황에 배열을 사용하면 성능 상으로 좋지 못한 선택이 될 수 있다.
2. 이터레이터는 메모리 사용을 절약한다.
=> 일반적으로 배열을 이용하기 위해선 배열의 모든 요소들을 메모리에 넣어두어야 한다.
일정 수열과 같은 데이터를 사용하기 위해서는 이터레이터를 활용하는 것이 더 좋은 선택이 될 수 있다.
만 개 그 이상의 메모리를 활용 할 땐 에터레이터가 좋을 것...
※ 개발자 입장에서는 배열이나 이터레이터나 상관없이 루프를 돌리는 작업으로 보이지만 시스템적으로는 엄청난 차이가 있다는 것이다.
제공하는 기능 기준으로 이터레이터는 배열의 부분 집합이다.
이터레이터를 이용하면 값을 모두 계산에서 보관할 필요가 없어 다음 값을 호출 받았을 때 그 때 필요한 값만
계산하는 것이 가능하다.
함수형 프로그래밍을 위한 map, reduce와 같은 메소드들은 이터레이터만 있어도 구현 가능하다.
이터레이터와 배열
이터레이터의 경우 생성하면 기본적으로 next 함수 하나만 있다고 생각하면 된다.next 함수에서는 done과 value 두 항목을 담은 객체를 반환한다.done은 이터레이터가 끝이 났는지 아직 남은게 있는지
velog.io
'정리 > Question' 카테고리의 다른 글
@types (0) | 2022.06.04 |
---|---|
3rd Party (0) | 2022.06.04 |
유사배열 vs 배열 (0) | 2022.06.02 |
Internet vs WWW ( World Wide Web ) (0) | 2022.05.30 |
Method vs Function (0) | 2022.05.19 |