λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL

JavaScript λŸ°νƒ€μž„

 

πŸ“Œ λŸ°νƒ€μž„μ΄λž€?

  • λŸ°νƒ€μž„μ΄λž€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ κ΅¬λ™λ˜λŠ” ν™˜κ²½μ„ λ§ν•œλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ˜ μ’…λ₯˜λ‘œλŠ” μ›Ή λΈŒλΌμš°μ €(크둬, νŒŒμ΄μ–΄ν­μŠ€, μ΅μŠ€ν”Œλ‘œλŸ¬ λ“±)ν”„λ‘œκ·Έλž¨κ³Ό Node.js λΌλŠ” ν”„λ‘œκ·Έλž¨μ΄ μžˆλ‹€.

 

 

 

πŸ“Œ JavaScript - μ‹±κΈ€ μŠ€λ ˆλ“œ, λ…Ό-λΈ”λ‘œν‚Ή μ–Έμ–΄

 

μ‹±κΈ€ μŠ€λ ˆλ“œ
μ‹±κΈ€ μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ νž™ μ˜μ—­κ³Ό ν•˜λ‚˜μ˜ 콜 μŠ€νƒμ„ κ°€μ§„λ‹€. ν•˜λ‚˜μ˜ 콜 μŠ€νƒμ„ κ°€μ§„λ‹€λŠ” μ˜λ―ΈλŠ” ν•œ λ²ˆμ— ν•œ κ°€μ§€ 일 밖에 ν•˜μ§€ λͺ»ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 예λ₯Ό λ“€μ–΄ λ„€νŠΈμ›Œν¬ μš”μ²­μ„ ν•œλ‹€λ©΄, 응닡이 올 λ•ŒκΉŒμ§€ λ‹€λ₯Έ 일은 ν•˜μ§€ λͺ»ν•˜κ³  마λƒ₯ 기닀릴 μˆ˜λ°–μ— μ—†λ‹€.

 

 

콜 μŠ€νƒ

ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” μˆœμ„œλ₯Ό κΈ°μ–΅ν•˜κ³  μžˆλ‹€. ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ €λ©΄ μŠ€νƒμ˜ κ°€μž₯ μœ„μ— ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ„£κ²Œ 되고, ν•¨μˆ˜μ—μ„œ 리턴이 μΌμ–΄λ‚˜λ©΄ μŠ€νƒμ˜ κ°€μž₯ μœ„μͺ½μ—μ„œ ν•¨μˆ˜λ₯Ό κΊΌλ‚Έλ‹€.

 

 

콜 μŠ€νƒ 예제

 

  

 μ½œ μŠ€νƒ μ—λŸ¬ λ©”μ‹œμ§€

μ–΄λ–€ ν•¨μˆ˜μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν–ˆλŠ”μ§€ 둜그λ₯Ό 보여쀀닀. μ—λŸ¬ λ‘œκ·Έμ— 좜λ ₯λ˜λŠ” 것듀이 콜 μŠ€νƒμ˜ 값듀이닀.

 

 

μŠ€νƒ μ˜€λ²„ ν”Œλ‘œμš°

콜 μŠ€νƒμ΄ 가득 차러 λ°œμƒν•˜λŠ” μ—λŸ¬μ΄λ‹€.

 

 

 

 

 

πŸ“Œ λΈ”λ‘œν‚Ή

 

콜 μŠ€νƒμ΄ 멈좘 μƒνƒœλ₯Ό λΈ”λ‘œν‚Ή μƒνƒœλΌκ³  ν•œλ‹€.

μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ”λ°, μ½”λ“œκ°€ μ’…λ£Œλ  λ•ŒκΉŒμ§€ μœ μ €κ°€ 클릭을 해도 μ–΄λ– ν•œ λ°˜μ‘μ„ ν•˜μ§€ μ•ŠλŠ” μƒνƒœκ°€ λœλ‹€. μ‚¬μš©μžμ—κ²Œ μ›ν™œν•œ μ œκ³΅μ„ μœ„ν•΄ 콜 μŠ€νƒμ΄ λ©ˆμΆ”κ²Œ ν•΄μ„œλŠ” μ•ˆλœλ‹€. λΈ”λ‘œν‚Ή μƒνƒœλ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 λ…Ό-λΈ”λ‘œν‚Ή, 비동기 μ½œλ°±μ„ μ‚¬μš©ν•˜λŠ” 것이닀.

 

 

 

 

πŸ“Œ λ…Ό-λΈ”λ‘œν‚Ή

 

μ‹±κΈ€ μŠ€λ ˆλ“œλŠ” μŠ€νƒμ΄ ν•˜λ‚˜λ°–μ— μ—†κΈ° λ•Œλ¬Έμ—, ν•œ λ²ˆμ— ν•œ κ°€μ§€ 일을 ν•œλ‹€. λ„€νŠΈμ›Œν¬ μš”μ²­μ„ ν•œλ‹€λ©΄ 응닡이 올 λ•ŒκΉŒμ§€ λ‹€λ₯Έ 일은 ν•˜μ§€ λͺ»ν•˜κ³  κΈ°λ‹€λ €μ•Ό ν•œλ‹€.

 

 

 

 

πŸ“Œ μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„

  • μ‹±κΈ€ μŠ€λ ˆλ“œμΈ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 맀번 5μ΄ˆκ°€ μ§€λ‚¬λŠ”μ§€ μ²΄ν¬ν•˜μ§€ μ•Šκ³ , 5초 후에 μ½œλ°±μ„ ν˜ΈμΆœν•  수 μžˆλŠ” μ΄μœ λŠ” λΈŒλΌμš°μ €κ°€ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” 것 μ΄μƒμ˜ 의미λ₯Ό κ°€μ§€κΈ° λ•Œλ¬Έμ΄λ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„μ€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„, Web API, 콜백 큐, 이벀트 루프, λ Œλ” 큐둜 κ΅¬μ„±λœλ‹€.

 

 

πŸ“Œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ - V8

  • 크둬은 μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μœΌλ‘œ V8을 μ‚¬μš©ν•˜κ³  μžˆλ‹€.
  • C++둜 λ§Œλ“€μ–΄μ Έ 있으며, Node.js, 크둬 λΈŒλΌμš°μ € λ“±μ—μ„œ μ‚¬μš©λœλ‹€.
  • V8은 μ‹±κΈ€ μŠ€λ ˆλ“œλ₯Ό μ œκ³΅ν•œλ‹€. μ‹±κΈ€ μŠ€λ ˆλ“œλŠ” ν•˜λ‚˜μ˜ 콜 μŠ€νƒ(Call Stack)κ³Ό ν•˜λ‚˜μ˜ νž™(Heap)을 μ œκ³΅ν•œλ‹€. 콜 μŠ€νƒμ€ μœ„μ—μ„œ μ΄μ•ΌκΈ°ν–ˆλ“―μ΄ ν•¨μˆ˜μ˜ 호좜 μˆœμ„œλ₯Ό μ €μž₯ν•œλ‹€. νž™μ€ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ“€μ΄ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€.
  • ν•˜λ‚˜μ˜ 콜 μŠ€νƒμ„ κ°€μ§€κ³  μžˆλ‹€λŠ” 말은 ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ λ™μž‘λ§Œ ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€. ν•˜μ§€λ§Œ 버젓이 setTimeoutμ΄λ‚˜ ajax(HTTP μš”μ²­), DOM 이벀트 λ“± 콜백으둜 비동기 λ™μž‘μ„ ν•˜λ„λ‘ μ½”λ”©ν•˜κ³  μžˆλ‹€. 심지어 V8 μ†ŒμŠ€μ—λŠ” μ΄λŸ¬ν•œ λ©”μ„œλ“œλ“€μ΄ μ •μ˜λ˜μ–΄ μžˆμ§€λ„ μ•Šλ‹€.
  • setTimeout(..., 5000)κ°€ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ, λˆ„κ°€ 5초λ₯Ό μΉ΄μš΄νŠΈν•˜κ³  5초 후에 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œν‚€λŠ” 걸까?
    • 이 역할을 ν•˜λŠ” μΉœκ΅¬κ°€ λ°”λ‘œ Web API이닀.

 

 

πŸ“Œ  Web API

 

Web APIλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ—μ„œ μ •μ˜λ˜μ§€ μ•Šμ•˜λ˜ setTimeoutμ΄λ‚˜ HTTP μš”μ²­ λ©”μ„œλ“œ, DOM 이벀트 λ“±μ˜ λ©”μ„œλ“œλ₯Ό μ§€μ›ν•œλ‹€.

 

 

πŸ“Œ 콜백 큐

 

콜백 νλŠ” Web API 결괏값을 μŒ“μ•„ λ‘λŠ” 큐이닀. 예λ₯Ό λ“€μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ setTimeout(cb, 5000)λ₯Ό ν˜ΈμΆœν•˜κ²Œ 되면, Web APIλŠ” 타이머λ₯Ό λ™μž‘μ‹œμΌœ 5초 후에 콜백 큐에, cb을 μŒ“λŠ”λ‹€.

 

 

πŸ“Œ 이벀트 큐

 

이벀트 λ£¨ν”„λŠ” 콜 μŠ€νƒκ³Ό 콜백 큐λ₯Ό κ΄€μ°°ν•˜λŠ” 역할을 ν•œλ‹€. 콜 μŠ€νƒμ΄ λΉ„μ–΄ 있으면 콜백 큐의 첫 번째 μ½œλ°±μ„ μŠ€νƒμ— μŒ“λŠ”λ‹€.

 

 


 

πŸ“Œ μžλ°”μŠ€ν¬λ¦½νŠΈ λŸ°νƒ€μž„ λ™μž‘ 예제

 

setTimeout

 


 

 

setTimeout(...,0)

0초 ν›„ μ‹€ν–‰. μ¦‰μ‹œ 싀행될 것 κ°™μ§€λ§Œ μ‹€μ œλ‘œλŠ” μ•„λ‹ˆλ‹€. μ™œλƒ? 콜 μŠ€νƒμ΄ λΉ„μ–΄μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

이벀트 λ£¨ν”„λŠ” 콜 μŠ€νƒμ΄ λΉ„μ–΄μžˆμ„ λ•ŒκΉŒμ§€ 기닀리닀가 콜 μŠ€νƒμ΄ λΉ„κ²Œ 되면 콜백 큐의 첫 번째 μ½œλ°±μ„ μŠ€νƒμ— μŒ“λŠ”λ‹€.

 

 


 

 

ajax(setTimeoutκ³Ό λ™μΌν•˜κ²Œ λ™μž‘)

 

 

 

 

 

μ°Έκ³ 

https://beomy.github.io/tech/javascript/javascript-runtime/

'TIL' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ  (1) 2023.10.11
useRef ・ Cookie  (0) 2023.07.28
require와 import ・ const  (0) 2023.07.27
This ・ λΈŒλΌμš°μ € μ €μž₯μ†Œ  (0) 2023.07.26
HTTP ・ Position  (0) 2023.07.25