JS. 42 Iterator & Generator

하승진·2024년 2월 19일

JS 따라잡기

목록 보기
42/49
post-thumbnail

Iterator

Iterable

: 반복이 가능하다, 배열은 반복 가능한 객체

: for...of 이용 가능하거나 Symbol.iterator 값을 가지면 iterable

Iterator

: 반복자는 next() 호출해서 {value: , done: } 2 개의 속성을 가지는 객체 반환하는 객체

숫자 배열을 makeIterator 매개변수에 넣어 호출

nextIndex 초기값 0을 기준으로 인자로 들어온 숫자 배열 길이만큼

+1씩 해주면서 don: false값이 들어간 객체 반환

길이에 벗어나면 undefined과 함께 done: true 반환

numbersArr -> Iterable , numbersIterator -> Iterator


Symbol.iterator

: 반복자(iterator)를 반환하는 메소드

arr, set, map 형태는 반복자 반환이 가능하나 객체 타입은 안되는 것을 확인




Generator

: 사용자 요구에 따라 다른 시간 간격으로 여러 값 반환 가능

단 한 번의 실행으로 함수 끝까지 실행되는 일반 함수와는 달리

사용자의 요구에 따라 일시적으로 정지될 수도, 다시 시작될 수도 있음

'*' : yield, 제너레이터 함수의 실행을 일시적으로 정지 = return과 유사


제너레이터의 Iterable에서 반환하는 Interator 자기 자신


yield

기본 createIds() 내 while은 무한으로 돌아가야하는 것이 맞음

하지만 yield 선언으로 필요 순간에만 돌아가게끔 설정

*Lazy Evaluation : 계산의 결과값이 필요 시까지 계산을 늦춰서 필요 데이터를 필요 순간에 생성

마찬가지로 next를 통해 1씩 증가된 상태를 반환

return(10)으로 10까지 증가한 상태에서 반환을 의미


yield*

yield에 를 붙이면 yield와 함께 표현된 이터러블 객체를 순회

profile
기어갈지언정 한 발자국씩이라도 가보자

0개의 댓글