keys(), entrieS() 같은 함수의 반환값이 왜 iterator인지 잘 이해가 안갑니다..!
안녕하세요 강사님.
수업노트에 올려주신 iterator와 iterable 강의까지 들었는데 잘 이해가 안되는 부분이 있어 질문합니다.
iterator와 iterable강의에서 'iterator 는 Collection이나 Aggregate 객체를 순횐하는 방법을 제공하는 것' 이라고 보았습니다. 구현 예제까지 본 후에는 '방법을 제공한다 = 어떤 동작을 제공한다 = 함수를 제공한다' 라고 생각했습니다. (예제에서는 hasNext(), next() 함수를 제공함)
그런데 [추가섹션] 배열의 순회 강의에서 배열의 keys() , values() , entires() , [Symbol.iterator]() 함수를 사용하는 걸 보면 각 함수들이 반환하는 iterator들은 함수를 제공하지 않는 걸로 보여서요.
이 함수들의 반환값이 for문으로 순회 가능한(iterable한) 객체들이고, 그럼 iterable한 객체를 만들어주는 keys()같은 함수들이 곧 'iterator'인게 아닌가 싶은데 왜 함수들의 반환값이 iterator가 되는 것인지 궁금합니다!
답변 1
0
팀오님 안녕하세요! 질문 주셔서 감사합니다! 😊
배열의 keys(), values(), entires() 는 모두 array iterator 를 반환합니다. 그래서 MDN 의 공식 문서에 아래와 같이 설명 되어 있습니다. (keys() 만 링크해 놓을게요!)
The keys() method of Array instances returns a new array iterator object that contains the keys for each index in the array.
코드로 직접 확인해 보겠습니다! 배열을 정의하고 values() 반환값을 확인해 보겠습니다.

그러면 위 그림처럼 Array Iterator 를 반환하고 Array Iterator 의 프로토타입에 next 와 같은 iterable 프로토콜을 정의하고 있는 것을 알 수 있습니다.
자바스크립트에서 모든 배열은 iterable 객체인데요 그 이유는 바로 [Symbol.iterator]() 를 정의하고 있기 때문입니다.
그래서 자바스크립트 코드를 작성할 때 많이 사용하는 Object 의 keys, values, entries 메서드는 배열을 반환하고 그 배열들이 모두 iterable 프로토콜을 준수하고 있는 배열 객체이기 때문에 for ... of 와 같은 이터러블 순회 루프를 사용할 수 있는 것입니다. 그래서 아래와 같이 확인할 수 있습니다.

답변이 팀오님의 궁금증에 도움이 되길 바랍니다. 😊
평일에는 제가 답변을 조금 늦게 드릴 수 있는 점 양해 부탁드리겠습니다 🙇♂
존재하지 않는 일기 url입력 시 alert이 두 번 떠요
0
13
1
47번 리턴 관련 질문
0
11
1
useState 직접 구현 부분에서 질문이 있습니다.
1
19
1
학습을 하고 블로그에 정리를 해도 괜찮을까요?
1
22
1
IO활용-회원관리예제1 샘플코드 문의
0
11
1
교재(3쇄)와 강의 내용 문의
0
28
2
중급 1편 학습 방향에 대해 조언 부탁드립니다
0
30
1
SingletonService가 JVM이 뜰 때 생성되는게 맞나요?
0
29
1
섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.
0
23
1
Enable Linting 항목을 찾을수가 없습니다.
0
46
2
선생님 강의 블로그에 정리해도되나요?
0
77
1
V8에서 undefined를 관리하는 방법에 대한 질문입니다
0
92
2
코드 샌드박스 소스 입력시 콘솔이 계속 반응하는것 같아요.
0
203
3
배열 생성자로 배열 생성시 empty와 undefined
0
195
2
nvm 설치 오류입니다.
0
479
2
console 이 안보입니다.
0
165
2
then 메서드에서 Promise 를 반환하는 코드에 대한 질문입니다.
0
223
2
for 문에서 var 키워드 변수를 사용할 때와 let 키워드 변수를 사용할 때 차이점
0
161
1
Global 스코프 질문
0
178
2
var 변수의 문제점 설명하실 때 질문 있습니다.
0
524
2
메모리에 변수 생성과 값을 할당할 때
0
429
2
클로저 스코프와 블록 스코프 질문드립니다.
2
697
1
코드샌드박스 화면구성이 달라졌네요.
0
709
4
커리큘럼 관련 질문
0
347
1





