TIL - 21.07.26 πŸ‘¨β€πŸ’»

μ„±ν›ˆΒ·2021λ…„ 7μ›” 26일
0

TIL

λͺ©λ‘ 보기
39/59
post-thumbnail

TIL - 21.07.26 πŸ‘¨β€πŸ’»

  • 비동기 vs 동기
  • 타이머 Web API

비동기, 동기

  • 동기적(synchronous) - μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©΄ ν•΄λ‹Ή μ½”λ“œκ°€ μ™„λ£Œλ λ•ŒκΉŒμ§€ λ‹€μŒ μ€„μ˜ μ½”λ“œ 싀행을 λ§‰λŠ” 것을 동기적이라 ν•œλ‹€.
    μ—¬κΈ°μ„œ λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” κ±Έ λ§‰λŠ” 것을 Blocking 이라 ν•œλ‹€.

  • 이 동기적인 흐름과 λ°˜λŒ€λ˜λŠ” κ°œλ…μ΄ 비동기적(asynchronous)이며 μ½”λ“œλ₯Ό 막지 μ•ŠλŠ” 것을 non-blocking이라 ν•œλ‹€.

Blocking vs Non-Blocking

  • Blocking - μš”μ²­μ— λŒ€ν•œ κ²°κ³Όκ°€ λ™μ‹œμ— μΌμ–΄λ‚œλ‹€. => synchronous

  • Non-Blocking - μš”μ²­μ— λŒ€ν•œ κ²°κ³Όκ°€ λ™μ‹œμ— μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€. => asynchronous

비동기 호좜

  • 콜백(callback) - λ‹€λ₯Έ ν•¨μˆ˜ A의 μ „λ‹¬μΈμžλ‘œ λ„˜κ²¨μ£ΌλŠ” ν•¨μˆ˜ Bλ₯Ό μ½œλ°±ν•¨μˆ˜λΌκ³  ν•œλ‹€.
    λ„˜κ²¨ λ°›λŠ” μ‚Όμˆ˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό ν•„μš”μ— 따라 μ¦‰μ‹œ μ‹€ν–‰ν•˜κ±°λ‚˜ λ‚˜μ€‘μ— μ‹€ν–‰κ°€λŠ₯ν•˜λ‹€.

μ½œλ°±μ„ μ—°κ²°ν•  λ•Œ ν•¨μˆ˜ 자체λ₯Ό μ—°κ²°ν•œλ‹€.( μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹˜. )

λΉ„λ™κΈ°μ˜ 사둀

  • DOM μš”μ†Œμ˜ 이벀트 ν•Έλ“€λŸ¬
    • 마우슀, ν‚€λ³΄λ“œ μž…λ ₯
    • νŽ˜μ΄μ§€ λ‘œλ”©

  • 타이머
    • 타이머 API (setTimeout λ“±)
    • μ• λ‹ˆλ©”μ΄μ…˜ API (requestAnimationFrame λ“±)

  • μ„œλ²„μ— μžμ› μš”μ²­ 및 응닡 ( μ‚¬μš© λΉˆλ„κ°€ κ°€μž₯ λ†’λ‹€. )
    • Fetch API
    • AJAX(XHR)

promise

promiseλŠ” 콜백 체인을 λ‹€λ£¨λŠ” λ°©λ²•μœΌλ‘œ, ν•¨μˆ˜μ— μ½œλ°±μ„ μ „λ‹¬ν•˜λŠ” λŒ€μ‹ μ— μ½œλ°±μ„ μ²¨λΆ€ν•˜λŠ” λ°©μ‹μ˜ 객체이닀.
ν•¨μˆ˜μ˜ λ°˜ν™˜μ„ new Promise(resolve, reject) 와 같은 μ‹μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” κ²ƒμœΌλ‘œ μ‚¬μš©ν•œλ‹€.

콜백 체인을 μ—°κ²°ν•˜λŠ” 방법은 .then(callback) λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜λŠ” 방법이 μžˆλŠ”λ°
new Promiseκ°€ λ°˜ν™˜λœ ν•¨μˆ˜ λ‹€μŒμ— μž‘μ„±ν•΄μ€ŒμœΌλ‘œ λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰ν•  μ½œλ°±ν•¨μˆ˜(resolve)λ₯Ό 지정할 수 μžˆλ‹€.

.then을 μ΄μš©ν• λ•Œ μ£Όμ˜ν•  점은 λ°˜λ“œμ‹œ λ°˜ν™˜ 값이 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 점이닀.

.catch() 같은 κ²½μš°λŠ” 보톡 콜백 체인의 κ°€μž₯ λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•˜λŠ”λ° .catch 상단에 μœ„ν•˜λŠ” μ½œλ°±ν•¨μˆ˜μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•  경우 catch의 μ½œλ°±ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ²Œ λœλ‹€.
.catch() 밑에 .then()을 체이닝 ν•  수 μžˆλ‹€.

promise의 νŠΉμ§•

  • μ½œλ°±μ€ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Event Loopκ°€ ν˜„μž¬ 싀행쀑인 콜 μŠ€νƒμ„ μ™„λ£Œν•˜κΈ° μ΄μ „μ—λŠ” μ ˆλŒ€ ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ”λ‹€.
  • 비동기 μž‘μ—…μ΄ μ„±κ³΅ν•˜κ±°λ‚˜ μ‹€νŒ¨ν•œ 뒀에 then(callback)을 μ΄μš©ν•΄ μΆ”κ°€ν•œ 콜백의 κ²½μš°λ„ μœ„μ™€ κ°™λ‹€.
  • then(callback)을 μ—¬λŸ¬λ²ˆ μ΄μš©ν•΄μ„œ μ—¬λŸ¬κ°œμ˜ μ½œλ°±μ„ μΆ”κ°€ ν•  수 있으며, 각각의 μ½œλ°±μ€ 주어진 μˆœμ„œλŒ€λ‘œ λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜κ²Œ λœλ‹€.

타이머 Web API

setTimeout(callback, milisec)

μ‹€ν–‰ν•  μ½œλ°±ν•¨μˆ˜μ™€ 기닀릴 λ°€λ¦¬μ΄ˆλ₯Ό 인자둜 λ°›λŠ” API이닀.
λ°˜ν™˜ κ°’μœΌλ‘œ μž„μ˜μ˜ 타이머 IDλ₯Ό 가지며 setTimeout APIλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λŠ” κ²ƒμœΌλ‘œ clearTimeout(setTimeout이(타이머 IDκ°€) ν• λ‹Ήλœ λ³€μˆ˜)둜 ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰μ „ μ·¨μ†Œ μ‹œν‚¬ 수 μžˆλ‹€.

setInterval(callback, milisec)

μΌμ •μ‹œκ°„ 간격을 가지고 ν•¨μˆ˜λ₯Ό 반볡 μ‹€ν–‰ν•˜λŠ” API이닀.
μ‹€ν–‰ν•  μ½œλ°±ν•¨μˆ˜μ™€ μ½œλ°±ν•¨μˆ˜λ₯Ό λ°˜λ³΅ν•  간격인 λ°€λ¦¬μ΄ˆλ₯Ό 인자둜 λ°›λŠ” API이며 λ°˜ν™˜ κ°’μœΌλ‘œ μž„μ˜μ˜ 타이머 IDλ₯Ό 가진닀.

ν•΄λ‹Ή API μ—­μ‹œ clearInterval(타이머 ID)둜 반볡 싀행쀑인 타이머λ₯Ό 멈좜 수 μžˆλ‹€.

였늘의 포인트

  • λ©”μ†Œλ“œ κ΅¬ν˜„ν• λ•Œ μ½œλ°±ν•¨μˆ˜ 자리만 λͺ…κΈ°ν•΄μ£Όλ©΄ λœλ‹€. ( μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. )

  • μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ 싀행은 컴파일 μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜λ‚˜ μ½œλ°±ν•¨μˆ˜λŠ” λΉ„λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λœλ‹€.

TO DO πŸ”₯

  • DFS, BFS μˆ™λ ¨
  • 비동기 처리 볡슡

Reference πŸ™‡

https://developer.mozilla.org/

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€