[코드스피츠 87, 88] 위임된 속성 & async await
✔️코드스피츠 87 - JS의 위임된 속성 (Delegated Property)
*Property
은닉과 캡슐화되어있는 것
*Property to Object --> delegate
✔️코드스피츠 88 - async await #1/2
*Sync Flow
메모리에 적재된 명령이 순차적으로 실행됨
*Sync Flow Control
Goto를 통해 명령의 위치를 이동함
*Sub Flow
함수 등을 통해 별도의 명령 셋을 여러 번 실행함
(예제)
function : 반복 사용할 수 있다. (sub flow에 속함)
promise : 한번 사용되면 파기되고 다시 만들어야 함 (sub flow가 아님)
*Blocking
Sync Flow가 실행되는 동안 ㅏ른 일을 할 수 없는 현상
멀티태스킹 불가능 (노이만 머신)
-블로킹 줄이는 방법?
sync flow를 짧게 하기! --> 하지만 실질적으로 불가능
다른 쓰레드에 syncflow를 떠넘기기
다른 쓰레드의 작업이 완료되면 원래 스레드에 보고해야 함 --> 동시성 문제 발생
*Non Blocking
Sync Flow가 납득할 만한 시간 내에 종료되는 것
*Sync
서브루틴이 즉시 값을 반환함
*Async
서브루틴이 다른 수단으로 값을 반환함
-다른수단?? --> Promise / callback function / iterations
-Async 단점
호출 결과가 즉시 반환되지 않으므로 현재의 sync flow가 종료됨
그 결과 현재의 어휘 공간에 내의 상태를 결과 시점에 사용할 수 없음
(=async 동작 사이의 변수들은 다 사라짐)
요청 시의 상태를 별도로 결과시점에 전달할 부가장치 필요
-Sync의 장점 + Async의 장점
sync로직으로 async를 사용할 수 있게 함
하지만 sync flow가 어긋나므로 이전 sync flow의 상태를 기억하며 이어 줄 장치 필요
상태를 기억하고 이어주는 장치 (Continuation)
이를 활용하는 프로그래밍 스타일 (Continuation Passing Style : CPS)
-JS에서 CPS가 중점적으로 사용되는 부분
Generator, Async, Asynchrous Iterators
✔️코드스피츠 88 - async await #2/2
*Async & Promise
Promise는 ES6부터 JS 표준 객체로 지원
promise.then() 의미?
*Async & await
동시적 병렬 실행?
suspend 기능을 가지고 있음
async await는 직렬만 수행할 수 있음???
await timeout(f1, 500)
--> 0.5만큼 지난 뒤 함수를 실행하겠다.
// await는 Promise 앞에서만 동작한다. timeout은 promise 반환!
promise.then
Promise.all : 각각 task를 병렬 수행함
Promise.race : 짧은 task를 찾아서 수행함 / 코드에 뒷정리가 필요함..
--> timeout이 지원되는 fetch 함수 사용
async는 무조건 promise !!