# Function

ํ•จ์ˆ˜๋ž€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์ฝ”๋“œ ์—ฌ๋Ÿฌ ์ค„์ด ๋ชจ์—ฌ ์žˆ๋Š” ์ฝ”๋“œ ๋ชจ์Œ ์ •๋„๊ฐ€ ๋˜๊ฒ ๋„ค์š”. ์ด ์ฝ”๋“œ์˜ ๋ชจ์Œ์€ ๋ฐ˜๋“œ์‹œ 1๊ฐœ ์ด์ƒ์˜ ๋ชฉ์ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

function sumNumbers(a, b) {
  return a + b;
}

์œ„์˜ sumNumbers ๋ผ๋Š” ํ•จ์ˆ˜๋Š” ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋„˜๊ฒจ ๋ฐ›์•„ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

sumNumbers(10, 20); // 30

# ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹
  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

๊ฐ๊ฐ์˜ ํ˜•์‹์„ ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
var sumNumbers = function(a, b) {
  return a + b;
};

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function sumNumbers(a, b) {
  return a + b;
}

์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€์ด๋“œ์—์„œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ๋” ์ถ”์ฒœํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๊ฐœ์ธ ์Šคํƒ€์ผ์— ๋”ฐ๋ผ์„œ ์–ผ๋งˆ๋“ ์ง€ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TIP

ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋„ ๋ณ€์ˆ˜๋‚˜ ์ธ์ž๋กœ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๊ธ‰ ๊ฐ์ฒด(first-class citizens) (opens new window)๋ผ๋Š” ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋„ค์š”!

# ํ•จ์ˆ˜ํ˜• ์‚ฌ๊ณ ์™€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹ค ๋•Œ๋Š” ๊ฐ€๊ธ‰์  ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility Principle) (opens new window)์„ ์ง€์ผœ์ฃผ์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์ด๋ž€ 1๊ฐœ์˜ ํ•จ์ˆ˜๋Š” 1๊ฐœ์˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด๋‹นํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ๋“ค์–ด๊ฐ€๋ฉด ๋“ค์–ด๊ฐˆ์ˆ˜๋ก ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง€๋ฉฐ ์ด๋Š” Vue.js ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋„ ์‚ฌ๊ณ  ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์ฑ…์ž„ ์›์น™์˜ ๊ด€์ ์—์„œ ์ž˜ ์„ค๊ณ„๋œ ํ•จ์ˆ˜์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// ์ž˜ ์„ค๊ณ„๋œ ํ•จ์ˆ˜
function sumNumbers(a, b) {
  return a + b;
}

์œ„ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ๋ช…์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‘ ์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ํ–‰์œ„์—๋งŒ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋ง์…ˆ ๋กœ์ง์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋Š” ๋„ฃ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ฐ™์€ ํ•จ์ˆ˜ ๋ช…์œผ๋กœ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

// ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋ฒ—์–ด๋‚˜๋Š” ํ•จ์ˆ˜
function sumNumbers(a, b) {
  var num = 1000;
  var data = {};

  $.get('domain.com/products/1').then(function(response) {
    data = response.data;
  });

  var total = a + b + num;
  return total;
}

์œ„ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ sumNumbers๋ผ๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ ๋‘ ์ˆ˜๋ฅผ ๋”ํ•˜๋Š” ๋กœ์ง ์ด์™ธ์—๋„ ๋ฐ์ดํ„ฐ ์š”์ฒญ์ด๋‚˜ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ๋”ํ•˜๋Š” ๋กœ์ง๋“ค์ด ๋’ค์—‰์ผœ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋ฒ—์–ด๋‚˜๋Š” ์ฝ”๋“œ์ด๋ฉฐ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข€ ๋” ๋‚˜์•„๊ฐ€์„œ ์•ž์˜ ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์˜ ๊ด€์ ์—์„œ ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ย 



ย 





ย 







// ํ•จ์ˆ˜ ๋ฆฌํŒฉํ† ๋ง
function sumNumbers(a, b) {
  return a + b;
}

function sumAll() {
  var num = 1000;
  var total = sumNumbers(0, 0) + num;
  return total;
}

function fetchData() {
  var data = {};
  $.get('domain.com/products/1').then(function(response) {
    data = response.data;
    return data;
  });
}

์œ„์™€ ๊ฐ™์€ ํ•จ์ˆ˜ ์„ค๊ณ„์— ๊ด€์‹ฌ์„ ๊ฐ–๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋กœ์ ธ(closure)๋ผ๋Š” ๊ฐœ๋…์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋กœ์ ธ ์ฑ•ํ„ฐ์—์„œ ๊ฐ„๋žตํžˆ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.