Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’กLanguage/JAVASCRIPT

[JS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ async ์™€ await (ft. ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ)

by soonybutter 2025. 4. 29.
728x90

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ async์™€ await  ; ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ !  

 

๋น„๋™๊ธฐ ์ž‘์—…์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

promise ๊ฐœ๋…๊ณผ ๋”๋ถˆ์–ด async์™€ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 


 

1. async ํ‚ค์›Œ๋“œ๋ž€?

async๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

  • async๋ฅผ ํ•จ์ˆ˜ ์•ž์— ๋ถ™์ด๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ˜ํ™˜๊ฐ’์ด Promise๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์ž๋™์œผ๋กœ Promise๋กœ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜๋œ๋‹ค.
async function getData() {
    return {
        name: "David",
        id: "d0228",
    };
}

console.log(getData());

 

์œ„ ์ฝ”๋“œ์˜getData()๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” Promise ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

*promise ์ƒํƒœ ์ฐธ๊ณ 

pending (๋Œ€๊ธฐ) ์ž‘์—…์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ
fulfilled (์„ฑ๊ณต) ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ (resolve ํ˜ธ์ถœ)
rejected (์‹คํŒจ) ์ž‘์—…์ด ์‹คํŒจํ•œ ์ƒํƒœ (reject ํ˜ธ์ถœ)
Promise {<fulfilled>: {name: "David", id: "d0228"}}

 

์ฆ‰, async ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ PromiseResult๋ฅผ ๊ฐ์‹ธ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

2. async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ Promise ๋ฐ˜ํ™˜ํ•˜๊ธฐ

async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์›๋ž˜ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”, ํ•ด๋‹น Promise๊ฐ€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

async function getData1() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({
                name: "์ด์ •์ˆ˜",
                id: "summerwinnner",
            });
        }, 1500);
    });
}

console.log(getData1());
Promise {<pending>}

 

1.5์ดˆ ํ›„ resolve๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ Promise๋Š” fulfilled ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, ๋น„๋™๊ธฐ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

 


 

3. await ํ‚ค์›Œ๋“œ๋ž€?

await๋Š” async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

  • await๋Š” Promise๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
  • ๊ธฐ์กด์—๋Š” .then() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์ง€๋งŒ, await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ๋ฆ„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
async function printData() {
    const data = await getData();
    console.log(data);
}

printData();

 

  • await getData()๋Š” getData()๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ์™„๋ฃŒ๋˜๋ฉด ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์ด data ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค.
  • ์ดํ›„ console.log(data)๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
{name: "David", id: "d0228"}

 

 

 


 

4. await๊ฐ€ ์—†๋‹ค๋ฉด?

await ์—†์ด ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด .then()์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

getData().then((data) => {
    console.log(data);
});

 

await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
.then() ์ฒด์ธ์„ ๊ตฌ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

 

 


5. async / await ์š”์•ฝ 

 

async ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•จ
await Promise๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ (async ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

 

 


 

 

๐Ÿ’ก์ •๋ฆฌ

 

async์™€ await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ›จ์”ฌ ๋” ์ง๊ด€์ ์œผ๋กœ, ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.


Promise์™€ then์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ํ๋ฆ„์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” async/await๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 

 

 

 

728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ