Hello Kitty Eyes Shut
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»κ³΅λΆ€ 기둝/πŸ“Œ λ¦¬μ•‘νŠΈ 기초 μŠ€ν„°λ””

[λ¦¬μ•‘νŠΈ 기초 μŠ€ν„°λ””] JavaScript 콜백 ν•¨μˆ˜

λ°˜μ‘ν˜•

 

 

 

 

 

πŸ“‘ JavaScript 콜백 ν•¨μˆ˜ (Callback Function)

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ°°μš°λ‹€ 보면 콜백 ν•¨μˆ˜(Callback function)λΌλŠ” μš©μ–΄λ₯Ό 자주 μ ‘ν•œλ‹€.

이 κ°œλ…μ€ λ‹¨μˆœν•˜λ©΄μ„œλ„ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 비동기 처리, 이벀트 핸듀링, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 같은 λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ 핡심이 되기 λ•Œλ¬Έμ—

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” 콜백 ν•¨μˆ˜κ°€ 무엇인지, μ™œ ν•„μš”ν•œμ§€, 그리고 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ ν™œμš©ν•  수 μžˆλŠ”μ§€λ₯Ό μ˜ˆμ œμ™€ ν•¨κ»˜ 정리해보렀고 ν•œλ‹€.

 

 


πŸŸ₯ 콜백 ν•¨μˆ˜λž€

콜백 ν•¨μˆ˜λž€ μžμ‹ μ΄ μ•„λ‹Œ λ‹€λ₯Έ ν•¨μˆ˜μ— 인자둜 μ „λ‹¬λ˜μ–΄ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜λ₯Ό λ§ν•œλ‹€.

function main(value){
  value(); // 전달받은 ν•¨μˆ˜λ₯Ό μ‹€ν–‰
}

function sub() {
  console.log("sub");
}

main(sub); // sub ν•¨μˆ˜κ°€ main ν•¨μˆ˜μ— μ „λ‹¬λ˜μ–΄ 싀행됨

 

μœ„μ˜ μ½”λ“œμ—μ„œ sub ν•¨μˆ˜λŠ” main ν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬λ˜μ—ˆκ³ , main ν•¨μˆ˜ μ•ˆμ—μ„œ ν˜ΈμΆœλ˜μ—ˆλ‹€.

λ”°λΌμ„œ sub은 콜백 ν•¨μˆ˜κ°€ λœλ‹€.

 

 


🟧 콜백 ν•¨μˆ˜κ°€ ν•„μš”ν•œ 이유

λ§Œμ•½ μ½œλ°±μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, 같은 λ™μž‘μ„ ν•˜λŠ” ν•¨μˆ˜κ°€ μ€‘λ³΅λ˜μ–΄ 생겨버린닀.

ꡬ체적으둜 예λ₯Ό λ“€λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

function repeat(count) {
  for (let idx = 1; idx <= count; idx++) {
    console.log(idx);
  }
}

function repeatDouble(count) {
  for (let idx = 1; idx <= count; idx++) {
    console.log(idx * 2);
  }
}

repeat(5);       // 1, 2, 3, 4, 5
repeatDouble(5); // 2, 4, 6, 8, 10

 

그런데 이 μ½”λ“œμ—μ„œμ˜ λ¬Έμ œλŠ” repeat와 repeatDouble이 거의 λ˜‘κ°™μ€ λ‘œμ§μ„ κ°–κ³  μžˆλ‹€λŠ” 점이닀.

단지 μ•ˆμ—μ„œ 좜λ ₯ν•˜λŠ” λ‚΄μš©λ§Œ 쑰금 λ‹€λ₯Ό 뿐인데, μ½”λ“œκ°€ μ€‘λ³΅λ˜μ–΄ 버린닀.

 

 

그런데 이럴 λ•Œ 콜백 ν•¨μˆ˜λ₯Ό ν™œμš©ν•˜λ©΄, 쀑볡을 μ—†μ• κ³  더 μœ μ—°ν•œ ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

function repeat(count, callback) {
  for (let idx = 1; idx <= count; idx++) {
    callback(idx); // 전달받은 ν•¨μˆ˜ μ‹€ν–‰
  }
}

repeat(5, function (idx) {
  console.log(idx * 2); // 2λ°° 좜λ ₯
});

repeat(5, function (idx) {
  console.log(idx * 3); // 3λ°° 좜λ ₯
});

 

 

그리고 μ•„λž˜μ™€ 같이 ν™”μ‚΄ν‘œ ν•¨μˆ˜κΉŒμ§€ 같이 ν™œμš©ν•΄μ£Όλ©΄ λ”μš± κ°„κ²°ν•΄μ§„λ‹€.

function repeat(count, callback) {
  for (let idx = 1; idx <= count; idx++) {
    callback(idx); // 전달받은 ν•¨μˆ˜ μ‹€ν–‰
  }
}

repeat(5, (idx) => {
  console.log(idx * 2); // 2λ°° 좜λ ₯
});

repeat(5, (idx) => {
  console.log(idx * 3); // 3λ°° 좜λ ₯
});

 

 


 πŸ“š κ²°λ‘ 

콜백 ν•¨μˆ˜λŠ” μ²˜μŒμ—” "ν•¨μˆ˜ μ•ˆμ— 또 λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό λ„£μ–΄ μ‹€ν–‰ν•œλ‹€"λŠ” μ„€λͺ… λ•Œλ¬Έμ— μ–΄λ ΅κ²Œ λŠκ»΄μ‘ŒλŠ”λ°,

μ‹€μ œλ‘œ μ½”λ“œλ₯Ό 따라가닀 λ³΄λ‹ˆ 생각보닀 λ‹¨μˆœν•˜λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

 

특히 μ΄λ²ˆμ— μ‚΄νŽ΄λ³Έ 예제 μ½”λ“œμ—μ„œ 숫자λ₯Ό μ–΄λ–»κ²Œ 좜λ ₯ν• μ§€λΌλŠ” λ™μž‘μ„ 직접 μ½”λ“œλ‘œ λ„£λŠ” λŒ€μ‹ μ—

κ·Έ λ™μž‘μ„ ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ μ „λ‹¬ν•˜λŠ” κ³Όμ •μ—μ„œ 콜백 ν•¨μˆ˜λΌλŠ” 것은 'λ™μž‘μ„ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜λŠ” 방법'이라고 μ΄ν•΄ν•˜κ²Œ λ˜μ—ˆλ‹€.

 

μ•žμœΌλ‘œλŠ” map, filter, forEach 같은 μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄ λ©”μ„œλ“œλ‚˜ 이벀트 처리 μ½”λ“œλ₯Ό λ³Ό λ•Œ

'μ•„ μ—¬κΈ°μ„œ 이 ν•¨μˆ˜κ°€ 콜백으둜 λ„˜μ–΄κ°€λŠ”κ΅¬λ‚˜' ν•˜κ³  μžμ—°μŠ€λŸ½κ²Œ 이해할 수 μžˆμ„ 것 κ°™λ‹€ πŸ˜†πŸ’›

λ°˜μ‘ν˜•