๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/Javascript

Callback & Promise

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 11. 4.

Callback๊ณผ Promise

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ 

โœ” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ์€ Web API๋กœ ๋“ค์–ด์˜ค๋Š” ์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ
โœ” ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ƒํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์งค ์ˆ˜ ์—†๋‹ค

์ฝœ๋ฐฑํ•จ์ˆ˜(Callback Function)

โœ” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜
โœ” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™ผ๋ฃŒ๋œ ํ›„ ์‹คํ–‰ํ•  ์ž‘์—…์„ ๋ช…์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ(asynchronous callback)์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

โœ” ๋ช…์‹œ์ ์ธ ํ˜ธ์ถœ์ด ์•„๋‹Œ ํŠน์ •ํ•œ ์กฐ๊ฑด ํ˜น์€ ํ–‰๋™์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋„๋ก ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
โœ” '์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด', '์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด', '๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ฉด'๋“ฑ์˜ ์กฐ๊ฑด์œผ๋กœ ์ดํ›„ ๋กœ์ง์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ
โœ” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•จ

์ฝœ๋ฐฑ ์ง€์˜ฅ

image


โœ” ์—ฐ์‡„์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•จ
โœ” ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊นŠ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Promise

๊ฐœ์š”

โœ” Callback Hell ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐ์ฒด
โœ” '์ž‘์—…์ด ๋๋‚˜๋ฉด ์‹คํ–‰ ์‹œ์ผœ ์ค„๊ฒŒ' ๋ผ๋Š” ์•ฝ์†
โœ” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์™„๋ฃŒ ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด
โœ” Promise ๊ธฐ๋ฐ˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”๋กœ ์ด์ „์— ์‚ฌ์šฉํ•œ Axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ!

  • ์„ฑ๊ณต์— ๋Œ€ํ•œ ์•ฝ์† then()
  • ์‹คํŒจ์— ๋Œ€ํ•œ ์•ฝ์† cathch()

then & catch

  <script>
    axios({
      method: 'get',
      url: URL,
    })
      .then(response => {
        console.log(response)
        return response.data
      })
      .then(response => {
        console.log(response)
        return response.title
      })
      .then(response => {
        console.log(response)
      })
      .catch(error => {
        console.log(error)
      })
  </script>

โœ” then(callback)

  • ์š”์ฒญํ•œ ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด callback ์‹คํ–‰
  • callback์€ ์ด์ „ ์ž‘์—…์˜ ์„ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

โœ” catch(callback)

  • then()์ด ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด callback ์‹คํ–‰
  • callback์€ ์ด์ „ ์ž‘์—…์˜ ์‹คํŒจ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›์Œ

โœ” then ๊ณผ catch ๋ชจ๋‘ ํ•ญ์ƒ promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜, ์ฆ‰ ๊ณ„์†ํ•ด์„œ chaining์„ ํ•  ์ˆ˜ ์žˆ์Œ
โœ” axios๋กœ ์ฒ˜๋ฆฌํ•œ ๋น„๋™๊ธฐ ๋กœ์ง์ด ํ•ญ์ƒ promise๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜, ๊ทธ๋ž˜์„œ ๊ณ„์† then์„ ์ด์–ด ๋‚˜๊ฐ€๋ฉด์„œ ์ž‘์„ฑ ๊ฐ€๋Šฅ

Promise๊ฐ€ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ(vs ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ)

  1. callback ํ•จ์ˆ˜๋Š” JavaScript์˜ Event Loop๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ด Call Stack์„ ์™„๋ฃŒํ•˜๊ธฐ ์ด์ „์—์€ ์ ˆ๋Œ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. 

     - Promise callback ํ•จ์ˆ˜๋Š” Event Queue์— ๋ฐฐ์น˜๋˜๋Š” ์—„๊ฒฉํ•œ ์ˆœ์„œ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

  1. ๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ๋’ค์— .then() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ์—๋„ 1๋ฒˆ๊ณผ ๋˜‘๊ฐ™์ด ๋™์ž‘
  2. .then()์„ ์—ฌ๋Ÿฌ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ callback ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.(chaining)

     - ๊ฐ๊ฐ์˜ callback์€ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ์‹คํ–‰๋œ๋‹ค.

     - chaining์€ Promise์˜ ๊ฐ€์žฅ ๋›ฐ์–ด๋‚œ ์žฅ์ 

  1. promise ๋ฐฉ์‹์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ ๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

'โญ Personal_Study > Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Axios  (0) 2022.11.05
๋™๊ธฐ์™€ ๋น„๋™๊ธฐ  (0) 2022.11.04
JavaScript์—์„œ์˜ This  (0) 2022.11.03
Event  (0) 2022.11.02
JavaScript๋ฅผ ํ™œ์šฉํ•œ DOM ์กฐ์ž‘ ๊ธฐ์ดˆ  (0) 2022.11.02

๋Œ“๊ธ€