본문 바로가기

카테고리 없음

자바스크립트 제너레이터

제너레이터

 

 

 

 

- function* 선언 (끝에 별표가 있는 function keyword) 은 generator function 을 정의하는데, 이 함수는 Generator 객체를 반환합니다.

 

- yield 키워드는 제너레이터 함수 (function* 또는  레거시 generator 함수)를 중지하거나 재개하는데 사용됩니다.

 

- yield 키워드는 제너레이터 함수의 실행을 중지시키거나 그리고  yield 키워드 뒤에오는 표현식[expression]의 값은 제너레이터의 caller로 반환된다. 제너레이터 버전의 return 키워드로 생각 할 수 있다.

 

- yield 키워드는 실질적으로  valuedone 이라는 두 개의 속성을 가진 IteratorResult 객체를 반환한다. value 속성은 yield 표현(expression)의 실행 결과를 나타내고, done 속성은 제너레이터 함수가 완전히 종료되었는지 여부를 불린(Boolean) 형태로 보여줍니다. 

 

yield* 표현은 다른 generator 또는 이터러블(iterable) 객체에 yield를 위임할 때 사용됩니다. -> 뭐여 ... 졸라 어렵네... 라고 생각했는데 예시를 잘 들어준 모질라

 

function* g1() {
  yield 2;
  yield 3;
  yield 4;
}

function* g2() {
  yield 1;
  yield* g1();
  yield 5;
}

var iterator = g2();

console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: undefined, done: true }

 

내가 실행해본 모습.

 

참고자료


https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/function*

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/yield

https://meetup.toast.com/posts/73 <- 이 글을 이해하기위해서 먼저 모질라의 글을 읽어야했음.

https://www.airpair.com/node.js/posts/nodejs-framework-comparison-express-koa-hapi <- 역시 제너레이터 함수에 대한 이해가 필요했다. 

 

 

 

 


그런데 비동기 동기 하다보니 블로킹 논 블로킹. 미뤄왔던 주제도 다시 떠올라서 헷갈리기 시작했다.

 

 

참고자료

 

https://nodejs.org/ko/docs/guides/blocking-vs-non-blocking/

-> 블로킹과 논블로킹 코드를 섞을 때의 위험성 참고

 

 

 

 


그리고 콜스택과 콜백 큐 실행순서에 대해서 설명해주는.  동영상. 근데 쉽다고 댓글이 많이 달려있었는데 ㅠ 나는 쉽ㅈ ㅣ않았다 ..... (이 영상에서는 블로킹을 작업이 스택에 쌓여 느려지는것이라고 말하고 있음)

이 영상에서 설명하는 블로킹...

 

 

 

 

https://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html

 

 

 

What the heck is the event loop anyway? – Philip Roberts

JavaScript programmers like to use words like,

2014.jsconf.eu

전체 영상 ㅇㅇ

 

What the heck is the event loop anyway? – Philip Roberts

JavaScript programmers like to use words like,

2014.jsconf.eu

https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-%EC%97%94%EC%A7%84-%EB%9F%B0%ED%83%80%EC%9E%84-%EC%BD%9C%EC%8A%A4%ED%83%9D-%EA%B0%9C%EA%B4%80-ea47917c8442

 

 

https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf


https://v8.dev/

크롬의 v8엔진

https://dayzen1258.tistory.com/entry/V8%EC%97%94%EC%A7%84%EC%9D%B4%EB%9E%80

역시 한글 소개글을 먼저 읽게되죠

 

위 글을 읽다보면 결국 이해해야하는 키워드가 또한 '프로토타입' 

https://medium.com/@bluesh55/javascript-prototype-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-f8e67c286b67 이글에서 진짜 설명을 잘 해놨네

http://www.nextree.co.kr/p7323/

https://medium.com/@shlee1353/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85%EA%B3%BC-%EC%83%81%EC%86%8D-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-prototype-inheritance-adb52d08550b

역시 프로토타입이란 특성을 기술해놓은 글.

 

 

https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-v8-%EC%97%94%EC%A7%84%EC%9D%98-%EB%82%B4%EB%B6%80-%EC%B5%9C%EC%A0%81%ED%99%94%EB%90%9C-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9E%91%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8B%A4%EC%84%AF-%EA%B0%80%EC%A7%80-%ED%8C%81-6c6f9832c1d9

 

 

https://dayzen1258.tistory.com/entry/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98%EC%99%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%A7%89%EC%95%84%EC%95%BC-%ED%95%98%EB%8A%94%EA%B0%80?category=816449 : 자바스크립트 메모리 누수와 막는 법.

 

 

https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/  : 이벤트 루프

이벤트 루프는 가능하다면 언제나 시스템 커널에 작업을 떠넘겨서 Node.js가 논 블로킹 I/O 작업을 수행하도록 해줍니다.(JavaScript가 싱글 스레드임에도 불구하고)

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

https://asfirstalways.tistory.com/362 

 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop 

https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#what-is-the-event-loop 

http://www.nextree.co.kr/p7292/