|
| 1 | +비동기 자바스크립트 프로그래밍은 브라우저가 이벤트에 응답하여 다른 코드를 실행하는 동안, 백그라운드에서 오랜 시간이 걸리는 작업을 수행하게 해줍니다. |
| 2 | + |
| 3 | +## 9.1 비동기 프로그래밍 |
| 4 | + |
| 5 | +자바스크립트에서 **동기 코드는 블로킹 방식**으로 실행됩니다. |
| 6 | +이는 코드가 순서대로 한 번에 한 문장씩 실행됨을 의미합니다 |
| 7 | + |
| 8 | +반면에 **비동기 코드는** **논블로킹 방식**으로 실행됩니다. |
| 9 | +즉, 자바스크립트 엔진은 현 재 실행 중인 코드가 다른 작업을 기다리는 동안 백그라운드에서 해당 비동기 코드를 실행할 수 있습니다. |
| 10 | +비동기 함수를 호출하면, 함수 내부의 코드가 백그라운드에서 실행되며 호출자 에게 즉시 결과가 반환됩니다. |
| 11 | + |
| 12 | +> 비동기 코드는 오래 실행되는 작업을 수행할 때 유용합니다. |
| 13 | +
|
| 14 | +동기 함수 |
| 15 | + |
| 16 | +```js |
| 17 | +function synchronousFunction() { |
| 18 | + // 동기 함수 동작 |
| 19 | +} |
| 20 | + |
| 21 | +synchronousFunction(); |
| 22 | +// 이 줄이 오기 전에 함수 내부의 코드를 실행 |
| 23 | +``` |
| 24 | + |
| 25 | +비동기 함수 |
| 26 | + |
| 27 | +```js |
| 28 | +function asynchronousFunction() { |
| 29 | + // 비동기 함수 동작 |
| 30 | +} |
| 31 | +asynchronousFunction(); |
| 32 | +// 함수 내부의 코드는 백그라운드에서 실행되며 // 이 줄로 제어권을 반환 |
| 33 | +``` |
| 34 | + |
| 35 | +## 9.2 배경(콜백함수) |
| 36 | + |
| 37 | +자바스크립트에서 콜백 함수는 다른 함수에 인수로서 전달되어, 비동기 작업이 완료된 후 실행됩니다. |
| 38 | + |
| 39 | +👎 '콜백 지옥'으로 불리는 상황을 초래할 수 있습니다. |
| 40 | + |
| 41 | +## 9.3 프로미스 패턴 |
| 42 | + |
| 43 | +프로미스는 비동기 작업의 결과를 나타내는 객체로, pending, fulfilled, rejected의 세 가지 상태를 가질 수 있습니다 |
| 44 | + |
| 45 | +```js |
| 46 | +function makeRequest(url) { |
| 47 | + return new Promise((resolve, reject) => { |
| 48 | + fetch(url) |
| 49 | + •then(response => response.json()) .then(data => resolve(data)) |
| 50 | + .catch(error => reject(error)); |
| 51 | + }); |
| 52 | +} |
| 53 | + |
| 54 | +makeRequest('http://example.com/’) |
| 55 | + .then(data => console.log(data)) |
| 56 | + .catch(error => console.error(error)); |
| 57 | +``` |
| 58 | +
|
| 59 | +👍 콜백보다 체계적이고 가독성이 높은 방법으로 비동기 작업을 처리할 수 있습니다. |
| 60 | +
|
| 61 | +## 9-4 async/await 패턴 |
| 62 | +
|
| 63 | +비동기 코드를 마치 동기 코드처럼 작성할 수 있게 해주는 자바스크립트의 기능 |
| 64 | +프로미스를 기반으로 구축되었으며, 비동기 코드 작업을 보다 쉽고 간결하게 만들어 줍니다. |
| 65 | +
|
| 66 | +```js |
| 67 | +async function makeRequest() { |
| 68 | + try { |
| 69 | + const response = await fetch("http://example.com/"); |
| 70 | + const data = await response.json(); |
| 71 | + console.log(data); |
| 72 | + } catch (error) { |
| 73 | + console.error(error); |
| 74 | + } |
| 75 | +} |
| 76 | +``` |
0 commit comments