DevLog

๊ณ ์ฐจํ•จ์ˆ˜(์ฝœ๋ฐฑํ•จ์ˆ˜) ์ •๋ฆฌ ๋ณธ๋ฌธ

๐Ÿง‘๐Ÿป‍๐Ÿ’ป ๊ฐœ๋ฐœ๊ฐœ๋ฐœ/javascript

๊ณ ์ฐจํ•จ์ˆ˜(์ฝœ๋ฐฑํ•จ์ˆ˜) ์ •๋ฆฌ

Seungjae Lee 2021. 6. 3. 22:19

ํŠน๋ณ„ํ•œ ๋Œ€์šฐ๋ฅผ ๋ฐ›๋Š” 1๊ธ‰ ๊ฐ์ฒด javascript ํ•จ์ˆ˜์˜ ํŠน์ง•

  • ๋ณ€์ˆ˜์— ํ• ๋‹น(assignment) ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž(argument)๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋กœ์„œ ๋ฆฌํ„ด๋  ์ˆ˜ ์žˆ๋‹ค.
//๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ

/*
 * ์•„๋ž˜๋Š” ๋ณ€์ˆ˜ square์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.
 * ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 *
 * ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ• ๋‹น ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
 * square(7); // --> ReferenceError: Can't find variable: square
 */

const square = function (num) {
  return num * num;
};

// square์—๋Š” ํ•จ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ (์ผ๊ธ‰ ๊ฐ์ฒด), ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž '()'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
output = square(7);
console.log(output); // --> 49โ€‹

 

//๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ฒฝ์šฐ

function double(num) {
  return num * 2;
}

function doubleNum(func, num) {
  return func(num);
}

/*
 * ํ•จ์ˆ˜ doubleNum์€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 * ํ•จ์ˆ˜ doubleNum์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž func์— ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ
 * ํ•จ์ˆ˜ func๋Š” ํ•จ์ˆ˜ doubleNum์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 * ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ํ•จ์ˆ˜ double์€ ํ•จ์ˆ˜ doubleNum์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 */
let output = doubleNum(double, 4);
console.log(output); // -> 8

 

//ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒฝ์šฐ

function adder(added) {
  return function (num) {
    return num + added;
  };
}

/*
 * ํ•จ์ˆ˜ adder๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 * adder๋Š” ์ธ์ž ํ•œ ๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ํ•จ์ˆ˜(์ต๋ช… ํ•จ์ˆ˜)๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
 * ๋ฆฌํ„ด๋˜๋Š” ์ต๋ช… ํ•จ์ˆ˜๋Š” ์ธ์ž ํ•œ ๊ฐœ๋ฅผ ๋ฐ›์•„์„œ added์™€ ๋”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.
 */

// adder(5)๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฐ์‚ฐ์ž '()'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
let output = adder(5)(3); // -> 8
console.log(output); // -> 8

// adder๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
// javascript์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5

 

//ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ณ , ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒฝ์šฐ

function double(num) {
  return num * 2;
}

function doubleAdder(added, func) {
  const doubled = func(added);
  return function (num) {
    return num + doubled;
  };
}

/*
 * ํ•จ์ˆ˜ doubleAdder๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 * ํ•จ์ˆ˜ doubleAdder์˜ ์ธ์ž func๋Š” ํ•จ์ˆ˜ doubleAdder์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
 * ํ•จ์ˆ˜ double์€ ํ•จ์ˆ˜ doubleAdder์˜ ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
 */

// doubleAdder(5, double)๋Š” ํ•จ์ˆ˜์ด๋ฏ€๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ธฐํ˜ธ '()'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
doubleAdder(5, double)(3); // -> 13

// doubleAdder๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ผ๊ธ‰ ๊ฐ์ฒด)
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
Comments