Callback / Promise

์ •์Šน์›ยท2023๋…„ 4์›” 5์ผ
0
post-thumbnail
post-custom-banner

๐Ÿ“’ ๋ชฉ์ฐจ

  • ๐Ÿ“Œ Callback์ด๋ž€?
  • ๐Ÿ“Œ Promise๋ž€?
  • ๐Ÿ“Œ ์ฐธ์กฐ

๐Ÿ“Œ Callback์ด๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ›๋Š” ์ธ์ž์˜ ๊ฐ’์„ string, number ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ์ž์ฒด๋กœ๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์„ callback์ด๋ผ ํ•œ๋‹ค.

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด๊ฒŒ๋˜๋ฉด, add ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด ์ธ์ž๋กœ 10๊ณผ callback ํ•จ์ˆ˜๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

callback ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ 5๋ฅผ ๋”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ add ํ•จ์ˆ˜๋Š” callback ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

โœ… ์˜ˆ์ œ

function add(a, callback) {
  return callback(a)
}
add(10, function (res) { 
  return res +5
});

โœ… Callback Hell

callback hell์€ callback์„ ์—ฐ์†์œผ๋กœ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง€๋Š” ๋ฌธ์ œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๊ฒŒ ๋˜๋ฉด, add ํ•จ์ˆ˜๋ฅผ ์—ฐ์†์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ 10์— 5+5+5+5๋ฅผ ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ด๋ ‡๋“ฏ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ๋„ callback์„ ์—ฐ์†์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด callback hell์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

add(10, res => {
  add(res, res => {
    add(res, res => {
      add(res, res => {
        console.log(res)
      })
    })
  })
})

๐Ÿ“Œ Promise๋ž€?

Primise๋ž€ ๊ธฐ๋ณธ์ ์œผ๋กœ callback๊ณผ ๊ฐ™์€ ์ผ์„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ primise๋Š” ์ž‘์—…์ด ๋๋‚œ ํ›„, ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ primise์˜ ๋ฉ”์†Œ๋“œ์ธ .then()์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

โœ… ์˜ˆ์ œ

let promise = new Promise(function(resolve, reject) {
  // executor (์ œ์ž‘ ์ฝ”๋“œ, '๊ฐ€์ˆ˜')
});

new Promise์— ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋Š” executor(์‹คํ–‰์ž, ์‹คํ–‰ ํ•จ์ˆ˜) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

executor๋Š” new Promise๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ, ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ œ์ž‘ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

executor์˜ ์ธ์ˆ˜ resolve์™€ reject๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ž์ฒด ์ œ๊ณตํ•˜๋Š” ์ฝœ๋ฐฑ์ด๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” resolve์™€ reject๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  executor ์•ˆ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

๋Œ€์‹ ์— ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค.

  • resolver(value) : ์ผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚œ ๊ฒฝ์šฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” value์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•œ๋‹ค.
  • reject(error) : ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” error์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•œ๋‹ค.

์ฆ‰, executor๋Š” ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ ์›ํ•˜๋Š” ์ผ์ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด executor๋Š” ์ฒ˜๋ฆฌ ์„ฑ๊ณต ์—ฌ๋ถ€์— ๋”ฐ๋ผ resolve๋‚˜ reject๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ, new Promise ์ƒ์„ฑ์ž๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” promise ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • state โ€” ์ฒ˜์Œ์—” "pending"(๋ณด๋ฅ˜)์ด์—ˆ๋‹ค resolve๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด "fulfilled", reject๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด "rejected"๋กœ ๋ณ€ํ•œ๋‹ค.
  • result โ€” ์ฒ˜์Œ์—” undefined์ด์—ˆ๋‹ค resolve(value)๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด value๋กœ, reject(error)๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด error๋กœ ๋ณ€ํ•œ๋‹ค.

๐Ÿ“Œ ์ฐธ์กฐ

https://techlog.io/Javascript/General/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B9%84%EB%8F%99%EA%B8%B0%ED%86%B5%EC%8B%A0-callback-promise-async-await-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/#Callback-%EC%98%88%EC%A0%9C

https://ko.javascript.info/promise-basics

post-custom-banner

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