[10λΆ„ ν…Œμ½”ν†‘] πŸ“– 카일의 ν”„λ‘ νŠΈμ—”λ“œμ˜ 비동기(16λΆ„) λ₯Ό 보고 μ •λ¦¬ν•˜λ©΄μ„œ 좔가적인 λ‚΄μš©μ΄ μžˆλŠ” κΈ€μž…λ‹ˆλ‹€ :)

<br/>

πŸ‘€ CallBack

μžλ°”μŠ€ν¬λ¦½νŠΈ κ°œλ°œμžλ“€μ€ κ½€ 였랜 μ‹œκ°„ λ™μ•ˆ 비동기 처리λ₯Ό μœ„ν•΄ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ™”μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μš”μƒˆλŠ” λ‹¨μˆœνžˆ 이 λ°©λ²•λ§ŒμœΌλ‘œ 비동기λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œλŠ” 거의 보지 λͺ»ν•  κ²ƒμž…λ‹ˆλ‹€.

콜백 기반의 비동기 처리 방식이 가지고 μžˆμ—ˆλ˜ ν•œκ³„μ™€ κ·Έ λŒ€μ•ˆμ μœΌλ‘œ μΆœν˜„ν•œ Promise, Async Function이 ν•΄κ²°ν•΄κ³ μž ν•œ 것이 무엇인지 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

<br/>

1️⃣ 콜백 문제 - μ‹ λ’°μ„± (μ œμ–΄μ˜ μ—­μ „)

μ œμ–΄μ˜ μ—­μ „ (Inversion Of Control)

function BrowserTasks() {
  // μ œμ–΄μ˜ λŒ€μƒ
	console.log('sync task');
	asyncRequest(asyncTask);
}

function asyncRequest(callBackFn) {
	// 비동기 μš”μ²­κ³Ό ν•¨κ»˜ μ „λ‹¬λœ μ½œλ°±μ€
  // μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ μ˜μ‘΄μ„±μ„ κ°€μ Έμ„œ μ œμ–΄κΆŒμ˜ 주체가 λ’€λ°”λ€λ‹ˆλ‹€.
  // 콜백 λ‚΄λΆ€μ—μ„œ 데이터에 λŒ€ν•œ μ˜ˆμ™Έμ²˜λ¦¬λŠ” κ°€λŠ₯해도
  // 비동기 μš”μ²­-콜백 호좜둜 μ΄μ–΄μ§€λŠ” 흐름은 μ™ΈλΆ€μ—μ„œ κ΄€μ°°ν•˜κ±°λ‚˜ μ œμ–΄ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  // β—οΈμ΄λ ‡κ²Œ μ œμ–΄κΆŒμ΄ λ’€λ°”λ€ŒλŠ” ν˜„μƒμ„ 'μ œμ–΄μ˜ μ—­μ „'이라 ν•©λ‹ˆλ‹€.
	ajax('url', function(data) {
			callBackFn(data);
	});
}

funciton asyncTask(data) {
	console.log(data);
}

<br/>

β˜‘οΈΒ μ œμ–΄κΆŒμ„ μžƒμ€ 콜백으둜 인해 κ°€λŠ ν•  수 μ—†λŠ” κ²½μš°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. ν•„μš”ν•œ 데이터λ₯Ό μ½œλ°±μ— 전달 ν–ˆλŠ”μ§€μ— λŒ€ν•œ μ—¬λΆ€
  2. 호좜 μ‹œμ  (λΉ λ₯΄κ±°λ‚˜, λŠλ¦¬κ±°λ‚˜)
  3. 호좜 횟수 (ν˜ΈμΆœμ„ μ•„μ˜ˆ μ•ˆν•˜κ±°λ‚˜, 많이 ν˜ΈμΆœν•˜κ±°λ‚˜)

μœ μ €κ°€ μ–΄λ–€ μƒν’ˆμ˜ ꡬ맀 λ²„νŠΌμ„ λˆŒλ €μ„λ•Œ, μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚΄λŠ” 콜백이 이와 같은 μ˜ˆμ‹œ 쀑 ν•˜λ‚˜λΌλ„ ν•΄λ‹Ήλœλ‹€λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? μ΄λŸ¬ν•œ λ²„κ·ΈλŠ” 곧 λ§€μΆœμ— μ§κ²°λ˜λŠ” 문제λ₯Ό λ§Œλ“­λ‹ˆλ‹€. 더 μ‹¬κ°ν•œ 것은 여기에 λ‚˜μ—΄ν•œ μΌ€μ΄μŠ€λŠ” μ΅œμ†Œν•œμ˜ 경우이고 방금의 μƒν˜Έμ•„ λ˜ν•œ λ§Žμ€ μ˜ˆμ‹œ 쀑 ν•˜λ‚˜μΌ λΏμ΄λΌλŠ” μ μž…λ‹ˆλ‹€.