inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

진짜! 자바스크립트(Javascript) - 기초부터 고급까지

순회 연산자📕

keys(), entrieS() 같은 함수의 반환값이 왜 iterator인지 잘 이해가 안갑니다..!

해결된 질문

198

팀오

작성한 질문수 13

0

안녕하세요 강사님.

수업노트에 올려주신 iterator와 iterable 강의까지 들었는데 잘 이해가 안되는 부분이 있어 질문합니다.

 

iterator와 iterable강의에서 'iterator 는 Collection이나 Aggregate 객체를 순횐하는 방법을 제공하는 것' 이라고 보았습니다. 구현 예제까지 본 후에는 '방법을 제공한다 = 어떤 동작을 제공한다 = 함수를 제공한다' 라고 생각했습니다. (예제에서는 hasNext(), next() 함수를 제공함)

그런데 [추가섹션] 배열의 순회 강의에서 배열의 keys() , values() , entires() , [Symbol.iterator]() 함수를 사용하는 걸 보면 각 함수들이 반환하는 iterator들은 함수를 제공하지 않는 걸로 보여서요.

이 함수들의 반환값이 for문으로 순회 가능한(iterable한) 객체들이고, 그럼 iterable한 객체를 만들어주는 keys()같은 함수들이 곧 'iterator'인게 아닌가 싶은데 왜 함수들의 반환값이 iterator가 되는 것인지 궁금합니다!

 

javascript es6 객체지향 es5

답변 1

0

코딩맥스 CodingMax

팀오님 안녕하세요! 질문 주셔서 감사합니다! 😊

배열의 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() 반환값을 확인해 보겠습니다.

SCR-20240906-isyz.png

그러면 위 그림처럼 Array Iterator 를 반환하고 Array Iterator 의 프로토타입에 next 와 같은 iterable 프로토콜을 정의하고 있는 것을 알 수 있습니다.

자바스크립트에서 모든 배열은 iterable 객체인데요 그 이유는 바로 [Symbol.iterator]() 를 정의하고 있기 때문입니다.

그래서 자바스크립트 코드를 작성할 때 많이 사용하는 Object 의 keys, values, entries 메서드는 배열을 반환하고 그 배열들이 모두 iterable 프로토콜을 준수하고 있는 배열 객체이기 때문에 for ... of 와 같은 이터러블 순회 루프를 사용할 수 있는 것입니다. 그래서 아래와 같이 확인할 수 있습니다.

SCR-20240906-ivsk.png


답변이 팀오님의 궁금증에 도움이 되길 바랍니다. 😊

 

평일에는 제가 답변을 조금 늦게 드릴 수 있는 점 양해 부탁드리겠습니다 🙇‍♂

존재하지 않는 일기 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