function

WONNY_LOGยท2023๋…„ 4์›” 17์ผ

javascript

๋ชฉ๋ก ๋ณด๊ธฐ
5/8

Arrow function

๐Ÿ’ก Arrow function์ด๋ž€?ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ES6๋ฌธ๋ฒ•์ด๋‹ค.function ํ‚ค์›Œ๋“œ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ๊ฒƒ๋ณด๋‹ค ๊ฐ„๋‹จํžˆ ํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ต๋ช…์ด๋‹ค.

๐Ÿ‘‰ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

// function ํ•จ์ˆ˜
var fun = function () {
  console.log("fun")
}; // fun

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
var arrow = () => {
  console.log("arrow");
};
arrow()// arrow

๐Ÿ‘‰ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ • ๋ฐฉ๋ฒ•

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
var arrow = () => console.log('app');
arrow(); // app

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ, ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
// ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ์ค„๋กœ ํ‘œํ˜„ํ•  ๋• "{}" ์—†์ด ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.
var arrow = x => x;
arrow('app'); // app

// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋ ค๊ฐœ์ธ ๊ฒฝ์šฐ, ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
// ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ์ค„๋กœ ํ‘œํ˜„ํ•  ๋• "{}" ์—†์ด ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.
var arrow = (a, b) => a + b;
arrow(1, 2); // 3

// "{}"๊ฐ€ ๋„ฃ๊ณ ์‹ถ๋‹ค๋ฉด return์„ ์จ์ค˜์•ผํ•œ๋‹ค.
var arrow = (a, b) => { return a + b };
arrow(1, 2); // 3

// "{}" ์‚ฌ์šฉ ์‹œ, return์ด ์—†์„ ๋•Œ
var arrow = (a, b) => { a + b };
arrow(1, 2); // undefined

// ์—ฌ๋Ÿฌ์ค„ ์ผ์„ ๋•Œ
var arrow = (a, b) => {
	var c = 3;
	return a + b + c;
}
arrow(1, 2, 3) // 6

// ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ
var arrow = () => ( { a: 1, b: 2, c: 3 } );
arrow(); // { a: 1, b: 2, c: 3 };

"{}"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ return์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค."{}"๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด undefied๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค."{}"์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์—ฌ๋Ÿฌ์ค„์„ ์ผ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

callback์ด๋ž€?

์šฐ๋ฆฌ๋Š” Javascript๋ผ๋Š” ์–ธ์–ด๋กœ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ 'callback'์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํ•œ๋ฒˆ์ฏค์€ ๋“ค์–ด๋ดค์„ ๊ฒƒ์ด๋‹ค.

๐Ÿ’กย callback์ด๋ž€?์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„, ์ˆ˜ํ–‰๋  ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.์‰ฝ๊ฒŒ ๋งํ•ด, ์–ด๋–ค ์ผ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์‹œํ‚ค๊ณ , ๊ทธ ์ผ์ด ๋๋‚˜๋Š” ๊ฒƒ์€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋๋‚˜๊ณ  ๋ถ€๋ฅผ ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.๐Ÿ‘‰๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— non-block์ด๋ฉฐ, ๋น„๋™๊ธฐ ๋ฐฉ์‹์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

function first(a,b,callback){
	let v=a*b;
	callback(v);
}

first(1,2,function(v){
	console.log(v);		//2
})
  • ์œ„์™€ ๊ฐ™์ด ์•„๋ž˜์—์„œ first ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ํ˜ธ์ถœํ•  ๋•Œ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ parameter๋กœ ๋„˜๊ฒจ์ค€๋‹ค.
  • ๊ทธ๋Ÿฌ๋ฉด first ํ•จ์ˆ˜์—์„œ๋Š” ๊ทธ ํ•จ์ˆ˜ parameter๋ฅผ callback์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ›๊ณ  ์žˆ๋‹ค.
  • first๊ฐ€ ์‹คํ–‰๋˜๋ฉด a,b๋ฅผ ๊ณฑํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ callbackํ•จ์ˆ˜์˜ parameter๋กœ ๋„ฃ์–ด์ค€๋‹ค.
  • ์—ฌ๊ธฐ์„œ callbackํ•จ์ˆ˜๋Š” ์•„๋ž˜์˜ ์ต๋ช… ํ•จ์ˆ˜์ด๋ฏ€๋กœ ๊ทธ ์ต๋ช… ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  • ๊ฒฐ๊ณผ ๊ฐ’์€ 2(1*2)๊ฐ€ ๋œ๋‹ค.

โœ๏ธ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š”

๋งŒ์•ฝ node.js๋ฅผ ์“ฐ๋ฉด์„œ ์ฝœ๋ฐฑ์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ์— callback ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๊ณผ์ •์ด ๋๋‚˜๊ธฐ ์ „์— ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ๋“ค์„ ๋ง‰๊ณ  ์ฐจ๋ก€๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด callback ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€