javascript Symbol.iterator 1

Symbol.iterator

공부할때 간간히 까먹기는 했는데 전체적으로 한번 정리가 필요한 시점이라 정리를 해보려고 한다.

현재 Symbol.iterator는 어떻게 사용되는가?

기존에 사용하던 for문에서 우리는 명령에 가까운 코딩을 해왔었다.
그렇다면 현재 ES6에서의 javascript 는 어떻게 변하였을까

1
2
3
4
5
6
7
8
9
10
11
12
//과거 ES5
var list =[1,2,3,4,5]
for(var i=0;i<list.length;i++){
list[i]
}

//현재 ES6
let list =[1,2,3,4,5]
for(const x of list){
x
}

이와 같은 변화의 기본 이유가 어떤 것이고 왜 이렇게 된 것인지
유인동 강사님의 강의를 듣고 매우 많이 정리가 되었다.
바로 위에서 말한 Symbol.iterator 라는 방식을 javascript는 채택 하고 쓰고 있던 것이었다.

  • Symbol.iterator라는 Symbol
    “심볼(symbol)”은 데이터 형식과 심볼 데이터 형식의 인스턴스를 생성하는 클래스와 유사한(class-like) “Symbol”이다라는 것이 현재 javascript 공식 문서의 설명이다.

우리는 한걸음 더 나아갔다. Symbol을 통해서 그렇다면 class와 비슷하게 추상화를 할 것이다라는 것을 추론해볼수 있다.

  • iterator라는 반복기
    영어 자체의 의미가 반복기(iterator)라는 뜻이다. 그렇다면
    좀 더 명확해졌다.

추상화를 통한 반복

Symbol.iterator는 결국 추상화를 위한 반복이다
약간의 예시를 보자

1
2
3
4
5
6
7
const arr=[1,2,3]
arr[Symbol.iterator]=null
// 배열의 Symbol.iterator 값을 초기화해보자

for(const x of arr) console.log(x)
//

답은 어떻게 되었을까?
역시 아무런 답이 나오지 않는다. TypeError arr is not iterable
of 의 순회는 과거의 방식과 달라진 것을 명확하게 알수 있었다.