[node.js ๊ณต๋ถ€] callback ํ•จ์ˆ˜

callback ํ•จ์ˆ˜์˜ ๊ฐœ๋…๊ณผ ์‹ค์ œ ํ™œ์šฉ ์˜ˆ์‹œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

Posted by hyeyeon-sun on August 08, 2021 · 2 mins read

๐Ÿšถโ€โ™€๏ธProlog

ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ€ ๋˜๋Š” ํ•จ์ˆ˜์ธ, callback ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณธ๋‹ค. callback ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ node.js์—์„œ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋ฉฐ, ์ดํ›„ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋ฅผ ์ดํ•ดํ•  ๋•Œ๋„ ํ•ต์‹ฌ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์‚ฌ์šฉํ•˜์—ฌ ์ตํ˜€๋‘๋ฉด ์ข‹๋‹ค.
๋จผ์ € callbackํ•จ์ˆ˜์˜ ์ •์˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ , ์‹ค์ œ ์‘์šฉ ์˜ˆ์‹œ์™€ ์ข…๋ฅ˜๋ณ„ callbackํ•จ์ˆ˜์˜ ์ ์šฉ, ์ต๋ช…์˜ callbackํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

1. call back ํ•จ์ˆ˜

โœ” ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ์ด ๋ฟ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๋‹ค.
โœ” ์ด๋•Œ ์ธ์ž๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ callbackํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.
โœ” ์˜ˆ๋ฅผ๋“ค์–ด ํ•˜๋‹จ์˜ ์ฝ”๋“œ์—์„œ sort๋ผ๋Š” ํ•จ์ˆ˜๋Š” b๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ callback ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

 a = [3,1,2];
   function b(v1, v2){console.log(v1,v2); return 0;}
   a.sort(b); 

์ •์˜ํ•œ callbackํ•จ์ˆ˜๋Š” ๋‚ด๊ฐ€ ํ˜ธ์ถœํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, sort๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์•Œ์•„์„œ ํ˜ธ์ถœํ•œ๋‹ค.

๋‚ด๊ฐ€ ๋งŒ๋“  callbackํ•จ์ˆ˜๋Š” ๋‚ด๊ฐ€ ํ˜ธ์ถœํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ์–ธ์  ๊ฐ€ ํ˜ธ์ถœ๋‹นํ•  ํ•จ์ˆ˜๋‹ค. ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ callback์ด๋ผ๊ณ  ํ• ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค !


2. call back ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ํ•จ์ˆ˜, ์ต๋ช…์˜ callbackํ•จ์ˆ˜

๐Ÿ”Ž call back ํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ํ•จ์ˆ˜

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” callbackํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ƒ๋‹จ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” callbackํ•จ์ˆ˜์˜ ์ด๋ฆ„๋งŒ์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

function sort(callback) {callback();};

callbackํ•จ์ˆ˜๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์งˆ ๊ฒฝ์šฐ์—๋Š” ์œ„์™€ ๊ฐ™์ด sortํ•จ์ˆ˜์—์„œ callbackํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฐ›์•„์™€ callbackํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

function sort(callback, v1, v2) {callback(v1, v2);};

๋ฐฐ์—ด์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์™€ callbackํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

function sort(callback, arr) {for ~ { callback()} };

๋˜๋Š” sort์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  sortํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ž„์˜์˜ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

function sort(callback) {callback(1,3); };


๐Ÿ”Ž ์ต๋ช…์˜ callback ํ•จ์ˆ˜

์ด๋Ÿฐ ์‹์œผ๋กœ ๋”ฐ๋กœ callbackํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ฃผ์–ด์ฃผ๊ณ  sort์˜ ์ธ์ž๋กœ ๋ฐ›์•„์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

function a(v1, v2) {return v1-v2 ;};
function sort(a);

๋˜๋Š” ์—ฌ๋Ÿฌ ํ•จ์ˆ˜์—์„œ callbackํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ด๋ฆ„ ์—†์ด ๋ฐ”๋กœ ์ธ์ž๋กœ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

function sort(function (v1, v2) {return v1-v2 ;});


๐Ÿ”Ž ์ธ์ž(Argument) VS ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)

์ธ์ž๋Š” ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ โ€˜ํ˜ธ์ถœโ€™์‹œ์— โ€˜์ „๋‹ฌ ๋˜๋Š” ๊ฐ’โ€™์„ ๋งํ•˜๊ณ ,
๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๊ทธ ์ „๋‹ฌ๋œ ์ธ์ž๋ฅผ ๋ฐ›์•„๋“ค์ด๋Š” ๋ณ€์ˆ˜๋‹ค.

์ฆ‰ ์ธ์ž๋Š” ๊ฐ’์„ ์˜๋ฏธํ•˜๊ณ , ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋ง๊ทธ๋Œ€๋กœ ๊ทธ ๊ฐ’์ด ๋‹ด๊ธด ๋ณ€์ˆ˜๋‹ค.