비동기에 앞서
Blocking || Non-blocking과 callback에 대해서 짚고 넘어가자
Blocking || Non-blocking
전화와 문자를 예로 설명할 수 있다.
전화 | 문자 |
하던 일을 멈추고 받아야한다(blocking) | 확인 후, 나중에 답장할 수 있다(none-blocking) |
요청에 대한 결과가 동시에 일어난다(Synchronous) | 요청에 대한 결과가 동시에 일어나지 않는다(Asynchronous) |
callback
앞서 공부한 callback에 대해서 알아야 한다.
> calback in action : 반복 실행하는 함수 (iterator)
[1,2,3,4].map(function(el, idx) {
return el * el
}
)
> callback in action : 이벤트에 따른 함수 (event handler)
document.querySelector('#btn').addEventListener('click', function(e) {
console.log('button clicked')
}}
동기 vs 비동기
동기 : 요청에대한 결과가 동시에 일어난다.
비동기 : 요청에 대한 결과가 동시에 일어나지 않는다
커피주문으로 동기와 비동기를 알아보자
동기(Synchronous)
- 손님1이 카페라떼를 주문한다.
- 주문을 받은 직원이 카페라떼를 내린다.
- 직원이 카페라떼를 손님1에게 전달한다.
- 손님2가 바닐라라떼를 주문한다.(손님1의 음료준비가 끝나야 주문할 수 있다)
- 주문을 받은 직원이 바닐라라떼를 내린다.
- 직원이 바닐라라떼를 손님2에게 전달한다.
* 동기의 흐름은 손님1의 음료를 준비하는 동안 손님2의 주문을 받지 못한다(비효율적...)
비동기(Asynchronous)
- 손님1이 카페라떼를 주문한다.
- 주문을 받은 직원이 카페라떼를 내린다.
- 카페라떼가 완성되면 직원이 손님1을 부른다.
- 직원이 손님1에게 카페라떼를 전달한다.
- 손님2가 바닐라라떼를 주문한다.
- 주문을 받은 직원이 바닐라라떼를 내린다.
- 바닐라라떼가 완성되면 직원이 손님1을 부른다.
- 직원이 손님1에게 바닐라라떼를 전달한다.
* 각 1과 2에는 blocking이 없다.
* 1-2, 2-2의 "완성되면"이 event에 해당한다.
* 1-1, 2-1는 응답이 비동기적으로 이루어진다.
* 1-2, 2-2는 callback에 해당한다.
비동기는 어떻게 사용되는가??
- DOM element의 이벤트 핸들러
- 마우스,키보드 입력(click, keydown 등..)
- 페이지 로딩(DOMContentLoaded)
- 타이머
- 타이머 API(setTimeout 등)
- 애니메이션 API(requsetAnimationFrame)
- 서버에 자원 request 및 response
- fetch API, axios API
- AJAX(XHR)
'javaScript' 카테고리의 다른 글
내장고차 함수 Array.reduce()에 대해 알아보자 (1) | 2022.11.29 |
---|---|
AJAX(feat. SPA, Fetch, JS, DOM, XHR...) (0) | 2022.11.29 |
class & instance (feat. OOP, ES6) (0) | 2022.11.23 |
사고의 추상화(feat. filter, map, reduce) (0) | 2022.11.22 |
Element와 node의 차이 (0) | 2022.11.22 |