🍎 Browser

μ™œ 호좜 "μŠ€νƒ", 콜백 "큐"일까?

μš”λ‹ˆκΉ€ 2023. 2. 20. 19:13

 

🍎 μ†Œκ°œ


과거에 μž‘μ„±ν•œ λΈŒλΌμš°μ € ꡬ쑰/λ™μž‘ 원리 ν¬μŠ€νŒ…μ„ μ •λ¦¬ν•˜λ‹€κ°€, 뢄리할 수 μžˆλŠ” 주제λ₯Ό λ°œκ²¬ν•˜μ˜€κ³ , μš”μ¦˜ μ™œ?λΌλŠ” μ§ˆλ¬Έμ„ λ˜μ§€κ³  λŒ€λ‹΅ν•˜λŠ” μ—°μŠ΅μ„ ν•˜κ³  μžˆκΈ°μ— κ°„λ‹¨νžˆ 정리해 λ³΄μ•˜λ‹€.

 

 

🍎 호좜 μŠ€νƒ, 콜백 큐가 각각의 μžλ£Œν˜•μ„ μ‚¬μš©ν•˜λŠ” 이유?


  • μ™œ 호좜 μŠ€νƒμ—μ„œ μŠ€νƒ μžλ£Œν˜•μ΄ μ‚¬μš©λ κΉŒμš”?

μ•„λž˜ 예제의 λ‚΄λΆ€ λ™μž‘ 과정을 λŸ°νƒ€μž„ ν™˜κ²½μ˜ 각 μž₯μΉ˜κ°€ 각각의 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ μ™€ λŒ€μž…ν•΄ μ„€λͺ…ν•΄ 보겠닀.

function level1(){
    console.log(1) // -- (4)
}

function level2(){
    level1() // -- (2)
    console.log(2) // -- (3)
}

function welcome(){
    console.log("welcome!")
}

level2() // -- (0)
welcome() // -- (1)

// 1
// 2
// welcome!

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ™κΈ°μ μœΌλ‘œ μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— (0) 번 μ½”λ“œκ°€ λͺ¨λ‘ μ‹€ν–‰λœ 후에 (1) 번 μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.

(0) 번 μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄μ„œ μΈν„°ν”„λ¦¬ν„°λŠ” ν•¨μˆ˜ level2와 κ·Έ μ‹€ν–‰ λ¬Έλ§₯을 ν˜ΈμΆœμŠ€νƒμ— μΆ”κ°€ν•˜κ³ , (2) 번 ν•¨μˆ˜κ°€ μ‹€ν–‰ λ¬Έλ§₯에 λ‹΄κΈ°κ³ , (2) 번과 (3) 번 μ½”λ“œλŠ” λ™μ‹œμ— 처리될 수 없기에 (2) 번이 λλ‚˜κΈ° μ „κΉŒμ§€ (3) λ‘œκ·Έλ¬Έμ€ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. (2) μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄μ„œ level() ν•¨μˆ˜μ™€ κ·Έ λ‚΄λΆ€ μ‹€ν–‰λ¬Έ log(1)이 μ°¨λ‘€λŒ€λ‘œ μŠ€νƒμ— μŒ“μ΄κ²Œ 되고, κ°€μž₯ λ§ˆμ§€λ§‰ λ“€μ–΄μ˜¨ log(1)λΆ€ν„° μ²˜λ¦¬λœλ‹€.

μ΄λ ‡κ²Œ μžλ°”μŠ€ν¬λ¦½νŠΈ νƒœμŠ€ν¬λŠ” κ°€μž₯ 내뢀에 μžˆλŠ” 싀행문이 μ’…λ£Œλ˜μ–΄μ•Ό μ°¨λ‘€λŒ€λ‘œ κ·Έ μ™ΈλΆ€λ₯Ό κ°μ‹Έλ˜ 싀행문이 μ’…λ£Œλ˜λŠ” μž¬κ·€μ μΈ ν˜•νƒœλ₯Ό 띀닀. 그렇기에 κ°€μž₯ λ§ˆμ§€λ§‰ λ“€μ–΄μ˜¨ 싀행문을 κ°€μž₯ λ¨Όμ € μ²˜λ¦¬ν•΄ μ£ΌκΈ° μœ„ν•˜μ—¬ First In Last Out νŠΉμ„±μ„ κ°€μ§„ μŠ€νƒ μžλ£Œν˜•μ΄ μ±„νƒλœ 것이닀 λ•…λ•…

 

 

  • κ·Έλ ‡λ‹€λ©΄ 콜백 νλŠ”...?

콜백 νλŠ” (사싀 μ–ΈκΈ‰ν•˜κΈ°λ„ 민망할 μ •λ„λ‘œ μ‚¬μš© μ΄μœ κ°€ λͺ…ν™•ν•˜μ§€λ§Œ) Web Apiκ°€ 콜백 ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•œ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ First In First Out νŠΉμ„±μ„ κ°€μ§„ 큐 μžλ£Œν˜•μ΄ μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€ λ•…λ•…λ•…

function cb1(){
    console.log(1)
}

function cb2(){
    console.log(2)
}

function cb3(){
    console.log(3)
}

setTimeout(cb1, 0) 
setTimeout(cb2, 0)
setTimeout(cb3, 0)

// 1
// 2
// 3