const array = [1,2,3,4,5,6,7];
const iterator = (function(){
let num = 1;
return {
next: function() {
return (
num > 7 ?
{ done: true} :
{ done: false, value: num++ }
);
}
};
})();
위의 코드를 살펴보면 당연히 배열은 어느 누구나 알다시피 1~7의 범위의 숫자가 들어있는 변수 array 이다.
바로 밑에 있는 iterator 변수에 들어있는 iterator 함수는 1~7의 값을 구하는 값이다. iterator를 만들게 되면 로직을 처리해주는 next 라는 함수를 써야하며 객체에 boolean 값을 담는 done 이라는 키 값과 변수의 값을 담고 있는 value 라는 키 값이 존재한다.
=> 배열 아이템 1부터 7, 7개는 모두 메모리를 차지한다. 그러나 iterator 는 변수 하나만 존재하며, 시스템 적으로 효율이 좋다.
배열의 아이템이 만 개 이상이 넘어가게 된다면, 개발자 입장에서는 배열을 선언하여 for loop를 돌며 아이템을 순회하는 것과 iterator를 구현하는 것, 아무런 감흥이 없다. 그러나 시스템적으로는 배열의 아이템 만 개 이상이 메모리를 차지하게 되고 iterator는 여전히 배열보다는 낮은 메모리를 차지하게 된다.
만약 순열, 조합 같은 알고리즘을 사용하게 되야하는 상황이 오게 된다면 배열 보다는 iterator로 구현하는 것이 훨씬 시스템적으로 좋다는 것이다.
=> 상황에 맞게 개발자, 시스템에게 효율적인 코드를 작성하자.