TIL/JS 2023/3/17 ๐Ÿ“š

๋ฐ•์ƒํ•˜ยท2023๋…„ 3์›” 17์ผ
0

TILย  CS/JS

๋ชฉ๋ก ๋ณด๊ธฐ
3/22

์˜ค๋Š˜์€ ๋น„๋™๊ธฐ์™€ ์ฝœ๋ฐฑ ๊ทธ๋ฆฌ๊ณ  promise ๊ฐ์ฒด์™€ async await์— ๋Œ€ํ•ด ํ•™์Šต์„ ์ง„ํ–‰ํ–ˆ๋‹ค!

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ž‘๋™์›๋ฆฌ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๋ฉด์„œ ๋น„๋™๊ธฐ์™€ ์กฐ๊ธˆ ๋” ์นœํ•ด์ง„ ๋Š๋‚Œ์ด ์žˆ์—ˆ์ง€๋งŒ,, ์•„์ง์€ ์–ด์‚ฌ(์–ด์ƒ‰ํ•œ์‚ฌ์ด) ์ด๋‹ค ใ…‹ใ…‹

๋˜ ์ตœ๊ทผ ๋‹ค์‹œ Todolist๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ addeventlisener๋ฅผ ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ ์•„์ง ์ œ๋Œ€๋กœ ์•Œ์ง€ ๋ชปํ•œ ์ฑ„ ์‚ฌ์šฉํ•˜๋Š” ๋Š๋‚Œ์„ ๋ฐ›์•„์„œ ๋น„๋™๊ธฐ ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šต์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

ํ•™์Šต์€ ์บกํ‹ดํŒ๊ต๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ 90% ์ฐธ๊ณ ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์บกํ‹ดํŒ๊ต๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๊ธ€๊ณผ ์œ ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค..!
์บกํ‹ดํŒ๊ต๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๊ธ€

๋น„๋™๊ธฐ โ“

๋น„๋™๊ธฐ๋Š” ์™œ ๋ฐœ์ƒํ• ๊นŒ? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์›๋ฆฌ์™€ ์—ฐ๊ด€์ด ์žˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ๋น„๋™๊ธฐํ•จ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค๋ฉด ์ด๋ฅผ ๊ธฐ๋‹ค๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.
์ฆ‰, ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ธฐ๋‹ค๋ ค์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์ž์„ธํžˆ ๋งํ•˜์ž๋ฉด ๋ชจ๋“  ํ•จ์ˆ˜๋Š” stack์— ์Œ“์ธ ํ›„ ์‹คํ–‰์ด ๋˜๋Š”๋ฐ ๋น„๋™๊ธฐํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ stack์œผ๋กœ ๊ฐ€์ง€ ์•Š๊ณ  ๋Œ€๊ธฐ์‹ค์„ ๊ฑฐ์ณ ์กฐ๊ฑด์ด ์™„๋ฃŒ๋˜๋ฉด queue๋ผ๋Š” ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐ„๋‹ค. stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ๊ทธ ๋•Œ queue์˜ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ stack์œผ๋กœ ๋“ค์–ด๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

console.log(1)
setTimeout(function(){
console.log(2)
},3000)
console.log(3)

์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜์˜ฌ๊นŒ?
์ˆœ์ฐจ์ ์œผ๋กœ 1 2 3์ด ์ถœ๋ ฅ๋ ๊นŒ?? ๊ฒฐ๊ณผ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
1,3์ด ๋จผ์ €์ถœ๋ ฅ๋˜๊ณ  2๋Š” 3์ดˆ๋’ค์— ์ถœ๋ ฅ์ด๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” console.log(1)์„ ๋จผ์ € ์ฝ๊ณ  ๊ทธ ํ›„ setTimeout์… ์ฝ๋Š”๋‹ค. ๊ทธ ํ›„ console.log(3)์„ ์ฝ๋Š”๋‹ค. setTimeout์€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์ด๊ธฐ์— ๋Œ€๊ธฐ์‹ค๋กœ ๋ณด๋‚ด ํ•ด๋‹น ์กฐ๊ฑด(3์ดˆ๊ฐ€ ์ง€๋‚ฌ๋‚˜)์ด ์™„๋ฃŒ๋˜๋ฉด queue๋กœ ๋ณด๋‚ธ๋‹ค.

stack์ด ๋น„์–ด์žˆ์„ ๋•Œ queue์—์„œ stack์œผ๋กœ ํ•ด๋‹น console.log()๊ฐ€ ๋„˜์–ด๊ฐ€ 3์ด ์ถœ๋ ฅ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.
์™œ๋ƒํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐํ•จ์ˆ˜๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๋Š”๋ฐ ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌํ•˜๋ คํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๊ณ  ์ด ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋“ค์„ ๋ชจ๋‘ ๊ธฐ๋‹ค๋ฆฐ ํ›„์— ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ž๋‹ˆ ๋˜ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒฐ๊ตญ ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ =>์ฝœ๋ฐฑ!!

์ฝœ๋ฐฑ โ“

์ฝœ๋ฐฑ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

  1. ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ์จ ์ด์šฉ๋˜๋Š” ํ•จ์ˆ˜.
  2. ์–ด๋–ค ์ด๋ฒคํŠธ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜์–ด์ง€๋Š” ํ•จ์ˆ˜.

์ฆ‰, ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜์–ด์ง„๋‹ค๋ฉด ๊ทธ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด


function Go(Callback){
  if("you need stop"){
   Callback() 
  }
  function Stop(){
 console.log("I need a rest") 
}
}

Go(Stop())

์ด๋•Œ์˜ Stop ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ์ด๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์•„๊นŒ์™€ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ์—์„œ ์ฝœ๋ฐฑ์œผ๋กœ ๋น„๋™๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋ง์€ ๋ฌด์—‡์ผ๊นŒ?

function Print(){
  console.log(2)
  console.log(3)
}
console.log(1)
setTimeout(Print,3000)

์ด๋Ÿฐ์‹์œผ๋กœ ์ฝœ๋ฐฑ์„ ํ™œ์šฉํ•˜์—ฌ ์กฐ๊ฑด์ด ๋งŒ์กฑ๋˜๋ฉด ํ•ด๋‹น ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰๋˜๋„๋ก ๋งŒ๋“ค๋ฉด๋œ๋‹ค.

ajax ํ†ต์‹ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๊ฐœ์„ ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋จผ์ € ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์€ ์˜ˆ์‹œ๋ฅผ ๋จผ์ € ๋ณด๋ฉด

function getData() { // 1. ํ•จ์ˆ˜ ์„ ์–ธ 2. ํ•จ์ˆ˜ ๋Œ€์ž… 7. ํ•จ์ˆ˜์‹คํ–‰
	var tableData; //8. ๋ณ€์ˆ˜ ์„ ์–ธ 9. ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”
	$.get('https://domain.com/products/1', // 10. ํ•จ์ˆ˜์‹คํ–‰ 11. ์ฝœ๋ฐฑ๋Œ€๊ธฐ
          function(response) { // 3. ํ•จ์ˆ˜์„ ์–ธ 4, ํ•จ์ˆ˜๋Œ€์ž…
		tableData = response; //12. tableData ์žฌ์„ ์–ธ 
	});
	return tableData; // 13. response๋Š” ์•„์ง๋“ค์–ด์˜ค์ง€ ์•Š์•„ undefined
}

console.log(getData()); //5. console.log ์‹คํ–‰ 6. getDate()์‹คํ–‰

์œ„์™€ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ฝ”๋“œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด reponse๊ฐ€ ๋“ค์–ด์˜ค๊ณ  ๋‚œ ํ›„ ๋‹ค์Œ ํ•จ์ˆ˜์ธ console.log()๊ฐ€ ์‹คํ–‰๋˜๋„๋กํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒํ•˜๋ฉด์ข‹์„๊นŒ?
๋ฐ”๋กœ ์ฝœ๋ฐฑ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค!!

function getData(CALLBACK) { 
	$.get('https://domain.com/products/1',
          function(response) {
		CALLBACK(response)
      //response๊ฐ€ ๋ฐ›์•„์˜ค๋ฉด ์ด๊ฐ’์ด CALLBACK์˜ ์ธ์ž๋กœ ์ „ํ•ด์ง„๋‹ค
	});
}
function CALLBACK(data){
  console.log(data)//๊ฐ€์ ธ์˜จ response๋ฅผ console!!
}

getDate(CALLBACK(data))

๊ทธ๋ ‡๋‹ค๋ฉด ์ฝœ๋ฐฑ ์ง€์˜ฅ๋„ ์ด์ œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค!!!
ํ•„์ž๋Š” ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด๋ผ๋Š” ํ˜„์ƒ์ด ์™œ์ด๋Ÿฌ๋‚˜๋Š”์ง€ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
ํ•ต์‹ฌ์€ "์ฝœ๋ฐฑ์„ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค."

step1(function(value1) {
  step2(function(value2) {
    step3(function(value3) {
      step4(function(value4) {
        step5(function(value5) {
          step6(function(value6) {
            // Do something with value6
          })
        })
      })
    })
  })
})

๊ฒฐ๊ตญ ์ฝœ๋ฐฑ์€ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์‚ฌ์šฉ๋˜์–ด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ๋ณด์ด๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‹ค๋ณด๋ฉด ํ•จ์ˆ˜๋“ค์ด ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ดํ•ด๋ฅผ ๋•๊ธฐ์œ„ํ•ด print ํ•จ์ˆ˜๊ฐ€ ๋น„๋™๊ธฐ์  ํ•จ์ˆ˜๋ผ๊ณ  ๊ฐ€์ƒ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์ž

function print(next){
  console.log(1)
  next(next2){
   console.log(2) 
    next2(next3){
      console.log(3)
      next3(next4){
       console.log(4)
        next4(next5){)
         console.log(5 
        }
      }
  }
}

๊ฒฐ๊ตญ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ ค๊ณ  ์ด ๋‹ค์Œ ํ•จ์ˆ˜๋“ค์„ ์—ฎ์–ด์„œ ๋„ฃ๋‹ค๋ณด๋ฉด ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์ฝœ๋ฐฑ์ง€์˜ฅ์ด ์•ˆ์ƒ๊ธฐ๋ฉด์„œ ๋น„๋™๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ Promise ๊ฐ์ฒด์ด๋‹ค.

Promiseโ“

Promise๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

function getData(callbackFunc) {
  $.get('url ์ฃผ์†Œ/products/1', function(response) {
    callbackFunc(response); 
  });
}

getData(function(tableData) {
  console.log(tableData);
});

์• ์„œ Promise๋ฅผ ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

function getData(){{
 return new Promise(function(resolve,reject){
  $.get(`url ์ฃผ์†Œ/product/1`,function(response){
   resolve(response) 
  }) 
 }) 
}
                           
getData().then((data)=>console.log(data))  
//ํ•ด๋‹น response๊ฐ€ data๋กœ ๋“ค์–ด๊ฐ„๋‹ค.            
                           

์ž˜ ๋ชจ๋ฅด๊ณ  ์ผ์„ ๋•Œ๋Š” ๊ทธ๋ƒฅ ์‚ฌ์šฉ๋ฐฉ๋ฒ•๋งŒ ์™ธ์šฐ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ.. ์•Œ๊ณ ๋ณด๋‹ˆ promise๊ฐ€ ํšจ์ž์ด๋‹ค.. ์ฝœ๋ฐฑ์ง€์˜ฅ๋„ ์—†์• ์ฃผ๋ฉด์„œ ํ•ด๋‹น ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ์ด๋ฅผ resolve๋ฅผํ†ตํ•ด ๊ทธ ๊ฐ’์„ ์ด์–ด ์ „๋‹ฌํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค๋‹ˆ!!

ajaxํ†ต์‹ ์— ์ต์ˆ™์น˜ ์•Š์•„ setTimeout ๋ฉ”์„œ๋“œ๋กœ promise๋ฅผ ํ•™์Šตํ•ด๋ณด์•˜๋‹ค.

function getData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("123");
      resolve("์„ฑ๊ณต");
    }, 3000);
  });
}
getData().then((data) => console.log(data));

setTimeout ๋น„๋™๊ธฐํ•จ์ˆ˜๊ฐ€ ํ•ด๋‹น ์กฐ๊ฑด์ด ๋๋‚˜๋ฉด resolve๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•˜์˜€๋‹ค.

Promise๋Š” ๊ฒฐ๊ตญ ๊ฐ์ฒด์ด๊ณ  new Promise๋ฅผ return ํ•œ๋‹ค๋Š” ๊ฒƒ์€ Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์„ฑ๊ณต๋˜๋ฉด than์ด๋ผ๋Š” ๊ฐ์ฒด๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜์—ฌ resolve ํ•ด์˜จ ๊ฐ’์„ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ณ  ์‹คํŒŒํ•˜๋ฉด catch๋ผ๋Š” ๊ฐ์ฒด๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜์—ฌ error๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

async์™€ awaitโ“

async await๋Š” ํ•„์ž๊ฐ€ ๋Š๋ผ๋Š” ๋ฐ”๋กœ๋Š” Promise๋ฅผ ๋” ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•!

๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

async function ํ•จ์ˆ˜๋ช…(){

await ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฉ”์„œ๋“œ()
  console.log("123")
}

์‚ฌ์‹ค async await๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋น„๋™๊ธฐ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์ด์ „์˜ ๋‡Œ๋กœ ๋Œ์•„๊ฐ„ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
๋งŒ์•ฝ ์ €์ƒํƒœ๋กœ ์ฝ”๋“œ๊ฐ€ ์ง„ํ–‰๋œ๋‹ค๋ฉด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ์ œ์ณ๋‘๊ณ  123์ด ๋จผ์ € ์ถœ๋ ฅ ๋˜์ง€ ์•Š์„๊นŒ??

ํ•˜์ง€๋งŒ async await๋ฅผ ์žฅ์ฐฉ(?) ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์œ„์—์„œ๋ถ€ํ„ฐ ์‹คํ–‰์ด ๋œ๋‹ค.

์ด๊ฒŒ ๋ฐ”๋กœ async await์ด๋‹ค! ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€

awailt๋ฅผ ๋ฐ›๋Š” ๋น„๋™๊ธฐํ•จ์ˆ˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค!

function fetchData(){
 return new Promise((resolve,reject)=>{
  const item=[1,2,3]
  resolve(item)
 }) 
}

async function PrintItem(){
 const item = await fetchData() 
 console.log(item)//[1,2,3]
  
}
PrintItem()

์ด๋ ‡๊ฒŒ ๋น„๋™๊ธฐํ•จ์ˆ˜์ž„์—๋„ ๋™๊ธฐํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋“ฏํ•œ ๊ฒฝํ—˜์„ ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค!

๊ทธ๋ ‡๋‹ค๋ฉด async await๋Š” ์–ด๋–ป๊ฒŒ ์˜ค๋ฅ˜์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„๊นŒ?

try - catch!! ๋ฌธ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด๋œ๋‹ค.
์ฆ‰, ๋™๊ธฐํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉด๋œ๋‹ค!!!!

0๊ฐœ์˜ ๋Œ“๊ธ€