๐ async/await๋ ๋ฌด์์ธ๊ฐ์?
async/await
๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ ์์
์ ์ฒ๋ฆฌํ๋ ํ๋์ ์ด๊ณ ๊ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ด์์. ES2017์์ ๋์
๋ ์ด ๋ฌธ๋ฒ์ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ฝ๊ณ ์ธ ์ ์๊ฒ ํด์ฃผ์ด, ๊ฐ๋ฐ์๊ฐ ๋น๋๊ธฐ ๋ก์ง์ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์์ฑํ ์ ์๊ฒ ๋์์ค์.
async/await
๋ ๋ ์คํ ๋์์ ์ฃผ๋ฌธํ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ๊ณผ์ ๊ณผ ์ ์ฌํด์.
๋จผ์ , async
ํจ์๋ ๋ ์คํ ๋์ ๋ค์ด๊ฐ์ ์ฃผ๋ฌธ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ํน์ ๋น๋๊ธฐ ์์
(์: ๋ฐ์ดํฐ ์์ฒญ)์ ์์ํด์. ๊ทธ๋ฆฌ๊ณ await
๋ ์ฃผ๋ฌธํ ์์์ด ์ค๋น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ฒ๋ผ, ๋น๋๊ธฐ ์์
์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๊ทธ ๋์ ํจ์์ ์คํ์ ์ผ์ ์ ์งํด์. ์์
์ด ์๋ฃ๋๊ณ ๊ฒฐ๊ณผ๊ฐ ์ค๋น๋๋ฉด, ๋ง์น ์๋น๋ ์์์ ๋ฐ์ ์์ฌ๋ฅผ ์์ํ๋ ๊ฒ์ฒ๋ผ, await
๋ค์์ ์ฝ๋๊ฐ ์คํ๋์ด ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํ๊ฒ ๋ผ์.
๐ฅ๏ธ async/await์ ์ฌ์ฉ
async
์ await
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด, ๋น๋๊ธฐ ํจ์๋ฅผ ์ ์ธํ๊ณ , ๋น๋๊ธฐ ์์
์ด ์๋ฃ๋ ๋๊น์ง ํจ์์ ์คํ์ ์ผ์์ ์ผ๋ก ์ค์งํ ์ ์์ด์. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์์
์ ๋ง์น ๋๊ธฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋ผ์.
1. async
ํจ์
async
ํค์๋๋ฅผ ํจ์ ์์ ๋ถ์ด๋ฉด, ํด๋น ํจ์๋ ํญ์ Promise๋ฅผ ๋ฐํํด์.- ์ด๋ ํจ์ ๋ด์์ ๋น๋๊ธฐ ์์ ์ ์ํํ ์ ์์์ ์๋ฏธํ๋ฉฐ, ํจ์๊ฐ ์๋ฃ๋์์ ๋ Promise๊ฐ ์ดํ(resolved)๋๊ฑฐ๋ ๊ฑฐ๋ถ(rejected)๋ผ์.
// ๋น๋๊ธฐ ํจ์ ์ ์
async function fetchData() {
const response = await fetch('https://example.com/data');
return response.json();
}
// ํจ์ ์ฌ์ฉ
fetchData().then(data => console.log(data));
์์ ์์ฑ๋ ์์ ์ฝ๋์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์์.
Async ํจ์ (fetchData):
- async function fetchData()๋ ์น์์ ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ํจ์์ ๋๋ค.
- fetch๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ , response.json()์ผ๋ก ์๋ต์ JSON ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
2. await
ํํ์
await
ํค์๋๋async
ํจ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Promise์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ๋๊น์ง ํจ์์ ์คํ์ ์ผ์ ์ค์งํด์.await
๋ Promise๊ฐ ์ดํ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ, Promise๊ฐ ์ดํ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋๊ธฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด์.
// async ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ
async function processData() {
try {
const data = await fetchData(); // fetchData ํจ์ ํธ์ถ, ์๋ฃ๊น์ง ๊ธฐ๋ค๋ฆผ
console.log('์ฒ๋ฆฌ๋ ๋ฐ์ดํฐ:', data);
} catch (error) {
console.error('๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค ์ค๋ฅ ๋ฐ์:', error);
}
}
// processData ํจ์ ํธ์ถ
processData();
์์ ์์ฑ๋ ์์ ์ฝ๋์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์์.
Await ํํ์ (processData ๋ด๋ถ):
- processData ํจ์๋ await fetchData()๋ฅผ ์ฌ์ฉํด fetchData ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
- await ํค์๋๊ฐ ์๊ธฐ ๋๋ฌธ์, fetchData ํจ์๊ฐ ์๋ฃ๋ ๋๊น์ง processData ํจ์์ ์คํ์ด ์ผ์์ ์ผ๋ก ์ค์ง๋ฉ๋๋ค.
๐ค async/await์ ์ฅ์
async/await
์ ์ฌ์ฉ์ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ด์:
- ๊ฐ๋ ์ฑ ํฅ์: ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์.
- ์๋ฌ ์ฒ๋ฆฌ:
try...catch
๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์๋ฌ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์. - ์ฝ๋ ๊ฐ๊ฒฐ์ฑ: ์ฝ๋ฐฑ ํจ์๋ ์ฒด์ธ๋
.then()
ํธ์ถ๋ณด๋ค ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์.
async function fetchData() {
try {
const response = await fetch('https://example.com/data');
const data = await response.json();
console.log('๋ฐ์ดํฐ:', data);
} catch (error) {
console.error('๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ ์ค๋ฅ:', error);
}
}
fetchData();
๊ฐ๋ ์ฑ ํฅ์: ์ ์์ ์์ await fetch()์ await response.json()์ ์์ฐจ์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ฐฐ์ด๋์ด ์์ต๋๋ค.
์๋ฌ ์ฒ๋ฆฌ: fetch ํจ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด catch ๋ธ๋ก์ด ์คํ๋์ด ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
์ฝ๋ ๊ฐ๊ฒฐ์ฑ: async/await์ .then()๊ณผ .catch()๋ฅผ ์ฌ์ฉํ๋ Promise ์ฒด์ธ๋ณด๋ค ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
๐จ ์ฃผ์ํ ์
await
๋ ์ค์งasync
ํจ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์์ด์. ์ด๋await
๊ฐ ๋น๋๊ธฐ ์์ ์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ ํจ์์์๋ ์ฌ์ฉํ ์ ์์ด์.- ์ฌ๋ฌ ๋น๋๊ธฐ ์์
์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ,
Promise.all()
์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์ ์ด ๋์์ ์คํ๋๋๋ก ํ ์ ์์ด์. ์ด๋ ๊ฐ๊ฐ์await
ํธ์ถ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋์ด ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์. try...catch
๋ธ๋ก์ ์ ์ ํ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์์ ์ค ๋ฐ์ํ ์ ์๋ ์์ธ๋ ์ค๋ฅ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํด์. ์ด๋ ๊ฒ ํ๋ฉด ์๊ธฐ์น ๋ชปํ ์ค๋ฅ๋ก๋ถํฐ ํ๋ก๊ทธ๋จ์ ์์ ํ๊ฒ ๋ณดํธํ ์ ์์ด์.
๐ ๊ฒฐ๋ก
async/await
๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํจ๋ฌ๋ค์์ ํ์ ์ ์ผ๋ก ๋ณํ์์ผฐ์ด์. ์ด ๋ฌธ๋ฒ์ ํตํด ๊ฐ๋ฐ์๋ค์ ๋ณต์กํ ๋น๋๊ธฐ ๋ก์ง์ ๋ง์น ๋๊ธฐ์ ์ธ ์ฝ๋์ฒ๋ผ ๊ฐ๊ฒฐํ๊ณ ๋ช
ํํ๊ฒ ์์ฑํ ์ ์๊ฒ ๋์์ด์. ์ด๋ ์ฝ๋์ ๊ฐ๋
์ฑ์ ํฌ๊ฒ ํฅ์์ํค๋ฉฐ, ์๋ฌ ์ฒ๋ฆฌ์ ๋๋ฒ๊น
์ ๋์ฑ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด์.
async/await
์ ๋์
์ผ๋ก, ์ฝ๋ฐฑ ๊ธฐ๋ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ๋ฐ์ํ๋ ์ฝ๋ฐฑ ์ง์ฅ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค์ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๊ฒ ๋์์ด์. ๋ํ, ์ด ๋ฌธ๋ฒ์ ๊ฐ๋ฐ์๊ฐ ๋น๋๊ธฐ ์ฝ๋์ ํ๋ฆ์ ๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ค์.
ํ์ง๋ง async/await
๋ฅผ ์ฌ์ฉํ ๋๋ ๋น๋๊ธฐ ์์
์ ๋ณ๋ ฌ ์ฒ๋ฆฌ, ์ ์ ํ ์๋ฌ ํธ๋ค๋ง, ์คํ ์ปจํ
์คํธ์ ๋ํ ์ดํด๊ฐ ํ์ํด์. ์ด๋ฌํ ์์๋ค์ ๊ณ ๋ คํ์ฌ async/await
๋ฅผ ์ ์ ํ ์ฌ์ฉํ๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ด์.
async/await
๋ฅผ ์๋ฌํ๋ ๊ฒ์ ํ๋ ์น ๊ฐ๋ฐ์์ ํ์์ ์ธ ๊ธฐ์ ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ณด๋ค ํจ์จ์ ์ด๊ณ ๊ฐ๋ ฅํ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ด์.
๐ ์ถ๊ฐ ์ ๋ณด
- ์๋ฐ์คํฌ๋ฆฝํธ์
async/await
์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, MDN Web Docs์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
'Language > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] this (1) | 2024.03.18 |
---|---|
[JavaScript] ES6 (0) | 2024.01.25 |
[JavaScript] ์ฝ๋ฐฑ ํจ์(Callback Function) (0) | 2023.12.14 |
[JavaScript] ์ฐ์ฐ์ (0) | 2023.12.14 |
[JavaScript] ๋ฐ์ดํฐ ํ (0) | 2023.12.13 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!