Module
import
- export 키워드로 내보내진 변수, 함수 등을 불러올 수 있는 키워드.
- 스크립트 의존성을 간편하게 관리할 수 있음 → 큰 프로젝트에서 사용되지 않는 script를 찾기 쉬움 (명시적 import를 통한 script 의존성 추적).
- script 태그로 로딩하는 경우 불러오는 순서가 중요하지만, import로 불러오는 경우 순서 무관함.
- script src로 불러오는 것과 다르게 전역오염이 일어나지 않음.
- 웹서버가 필요함. 다만 serve 모듈로 로컬 웹서버를 띄워서 진행하기 때문에 괜찮음.
비동기 처리 방식
- JS는 싱글 스레드로 동작하지만, 많은 동작은 비동기로 동작함.
- 비동기 처리란 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 JS의 특성을 말함.
- ex1) 10초짜리 3개의 동작을 동기적으로 처리하면 30초이지만, 비동기적으론 10초가 걸림.
- ex2)
addEventListener
함수 : 이벤트 리스너가 정의한 이벤트가 발생할 때 콜백함수 실행.
- ex3)
setTimeout
,setInterval
: 콜백함수가 바로 실행되지 않고, 정의한 시간 후에 실행됨.
- setTimeout의 시간을 0으로 넣거나 지정하지 않는다고 해도 바로 실행되지 않음.
- ex4)
XMLHttpRequest(XHR)
: 데이터를 비동기로 요청하고, 요청 후 동작을 비동기로 처리함.
- 모든 작업을 동기로 처리할 경우 요청 후 응답이 오기 전까지 브라우저가 굳어버림.

request, callback
- 처음부터 api를 불러오기 보다 같은 형식의 dummy data를 만들어 호출해보는 것이 좋음.
promise
- 비동기 작업을 제어하기 위해 나온 개념으로, 콜백지옥에서 어느정도 벗어날 수 있게 해줌.
- promise로 정의된 작업끼리 연결할 수 있으며, 이를 통해 코드이 depth가 깊어지지 않는 효과가 있음.
- promise의 then 내에서 promise를 return할 경우 체이닝하여 then을 사용할 수 있음.
- promise chain 중 작업이 실패했을 경우
.catch
로 잡을 수 있음(디버깅이 어려우니 사용하는 것을 권장함).
- 성공, 실패 여부와 상관없이 호출해야 하는 코드가 있다면 finally에서 처리함.
promise 내장함수
- Promise.all(interable) : 여러 promise를 동시에 처리할 때 유용함.
- Promise.race(iterable) : 여러 promise 중 하나라도 resolve 또는 reject 되면 종료됨.

- Promise.any(iterable) : 여러 promise 중 하나라도 resolve되면 종료함(race와 달리 하나라도 resolve가 되어야지 처리가 됨, reject는 무시함).
- Promise.allSettled(iterable) : 여러 promise의 성공, 실패와 상관없이 모두 이행된 경우를 처리함. 실행 중인걸 pending, 끝난 걸 settled(fulfilled)라고 함.
- Promise.resolve : 주어진 값으로 이행하는 Promise.then 객체를 만듦. 주어진 값이 Promise인 경우 해당 Promise가 반환됨. then 실행 등 반드시 return 타입을 Promise로 맞춰야할 때 사용함.
- Promise.reject : 주어진 값으로 reject 처리된 Promise.then 객체를 만듦. 주어진 값이 Promise인 경우 해당 Promise가 반환됨 (resolve와 반대되는 개념).
async, await
- Promise를 동기처럼 보이되 비동기로 실행할 수 있음.
- 사용법
- async 키워드 함수가 붙은 함수는 실행 결과를 Promise로 감쌈 → async는 promise들로 돌아감.
- resolve, reject는 try catch + finally 로 해결함.
논리가 연결되어 있기 때문에 어느 한쪽이 낫다기 보단 모든 걸 자유자재로 다룰 줄 알아야 함.
TodoList에 적용한 callback, promise, async await 다시 한 번 적용해보기
(과제로 대체 가능하면 과제로..)