# 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)๋ผ๋ ๊ฐ๋ ์ ์ ํํ ์ดํดํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด๋ก์ ธ ์ฑํฐ์์ ๊ฐ๋ตํ ์๊ฐํ๊ฒ ์ต๋๋ค.