keys(), entrieS() 같은 함수의 반환값이 왜 iterator인지 잘 이해가 안갑니다..!
안녕하세요 강사님.
수업노트에 올려주신 iterator와 iterable 강의까지 들었는데 잘 이해가 안되는 부분이 있어 질문합니다.
iterator와 iterable강의에서 'iterator 는 Collection이나 Aggregate 객체를 순횐하는 방법을 제공하는 것' 이라고 보았습니다. 구현 예제까지 본 후에는 '방법을 제공한다 = 어떤 동작을 제공한다 = 함수를 제공한다' 라고 생각했습니다. (예제에서는 hasNext(), next() 함수를 제공함)
그런데 [추가섹션] 배열의 순회 강의에서 배열의 keys() , values() , entires() , [Symbol.iterator]() 함수를 사용하는 걸 보면 각 함수들이 반환하는 iterator들은 함수를 제공하지 않는 걸로 보여서요.
이 함수들의 반환값이 for문으로 순회 가능한(iterable한) 객체들이고, 그럼 iterable한 객체를 만들어주는 keys()같은 함수들이 곧 'iterator'인게 아닌가 싶은데 왜 함수들의 반환값이 iterator가 되는 것인지 궁금합니다!
Câu trả lời 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 와 같은 이터러블 순회 루프를 사용할 수 있는 것입니다. 그래서 아래와 같이 확인할 수 있습니다.

답변이 팀오님의 궁금증에 도움이 되길 바랍니다. 😊
평일에는 제가 답변을 조금 늦게 드릴 수 있는 점 양해 부탁드리겠습니다 🙇♂
프론트엔드 학습 수준 문의
0
19
2
질문있습니다
0
17
1
1번 문제 질문입니다.
0
23
1
음악플레이어 문제 중 코드질문
0
17
1
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
36
2
문제와 풀이4 문제점
0
32
2
최근 코테, 과제 테스트 트렌드
0
51
2
lucide react 아이콘 설치
0
34
2
17강 zustand store 서버에서 생성
1
29
1
문제와 풀이
0
19
1
선생님 강의 블로그에 정리해도되나요?
0
52
1
V8에서 undefined를 관리하는 방법에 대한 질문입니다
0
69
2
코드 샌드박스 소스 입력시 콘솔이 계속 반응하는것 같아요.
0
166
3
배열 생성자로 배열 생성시 empty와 undefined
0
171
2
nvm 설치 오류입니다.
0
430
2
console 이 안보입니다.
0
145
2
then 메서드에서 Promise 를 반환하는 코드에 대한 질문입니다.
0
192
2
for 문에서 var 키워드 변수를 사용할 때와 let 키워드 변수를 사용할 때 차이점
0
141
1
Global 스코프 질문
0
163
2
var 변수의 문제점 설명하실 때 질문 있습니다.
0
510
2
메모리에 변수 생성과 값을 할당할 때
0
408
2
클로저 스코프와 블록 스코프 질문드립니다.
2
688
1
코드샌드박스 화면구성이 달라졌네요.
0
673
4
커리큘럼 관련 질문
0
334
1

