๊ธ์ ์์ฑํ๊ธฐ์ ์์ ์ด ๊ฒ์๊ธ์ ์ง์์ ์ ํ๋ธ ๋๋ฆผ ์ฝ๋ฉ by ์๋ฆฌ๋์ ๋์์์ด ์ถ์ฒ์์ ์๋ ค๋๋ฆฝ๋๋ค.
https://www.youtube.com/watch?v=e_lU39U-5bQ&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=5
๋ณ์์ ์ด๋ฆ์ ๋ช ์ฌ
ํจ์์ ์ด๋ฆ์ ๋์ฌ๋ก ์๋ช ํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ ์ด๋ค
(ex. do-something)
์๋ฐ์คํฌ๋ฆฝํธ์์ Function์ Object์ด๋ค.
Function์ ์์
function printHello() {
console.log('hello');
}
printHello();
์์ ๊ฐ์ function์ ์์ฑํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ 'hello'๊ฐ ์ถ๋ ฅ์ด ๋๋ค
hello
ํ์ง๋ง ์์ function์ ๋งค์ฐ ์ธ ์ผ์ด ์๋ค ๋ณดํต ์๋์ ๊ฐ์ด ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ์์์ function์ ์์ฑํ๋ค
function print(massage) {
console.log('massage');
}
print('hello');
์์ ์ฝ๋๋ print๋ผ๋ function์ ํธ์ถํ์ฌ message๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค
์๋ฐ์คํฌ๋ฆฝํธ์์๋ C ๋ Java์ฒ๋ผ ๋ฐ์ดํฐ์ ํ์ ์ด ์กด์ฌํ์ง ์๋๋ค
๊ทธ๋์ ๋งค๊ฐ๋ณ์๋ก ์ซ์๋ก ๋ฐ์ ๊ฒฝ์ฐ์๋ ์ซ์๋ฅผ ๋ฌธ์ํ์ผ๋ก ๋ณํํ์ฌ ๋ฌธ์๋ก ์ถ๋ ฅ์ด ๋๋๋ฐ
ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ์์๋ ๋ฐ์ดํฐ์ ํ์ ์ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค
๋ฐ์ดํฐ ํ์ ์ ์ง์ ํด์ฃผ๋ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ ์ข์ (?) ์ด์ ๋ ํจ์์ ์ธํฐํ์ด์ค๋ง ๋ด๋
๋ฌด์์ ํ๋ ํจ์์ธ์ง ํ ๋์ ์ ์ ์๊ธฐ ๋๋ฌธ์ธ ๋ฏํ๋ค
โ
์์ง ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฐ์ฐ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํด ์ฃผ์ง ์๊ณ ์ฝ๋ฉ์ ํด๋ณด๋๋ก ํ์!
( C์ธ์ด๋ง 3๋ ์ ๊ณต๋ถํ ๋๋ก์๋ ๋๋ฌด ์ ์์ด ๋์ง ์๋๋ค ใ ใ )
Default parameters
ES6์์ ์๋ก ์ถ๊ฐ๋์ด์ง ๊ธฐ๋ฅ์ด๋ฉฐ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค
function showMessage(message, from){
console.log(`${message} by ${from}`);
}
showMessage('Hi!');
์์ ๊ฐ์ด ๋งค๊ฐ๋ณ์๋ก message์ ๊ฐ์ ๋ฐ์์ง๋ง from์ ๊ฐ์ ๋ฐ์ง ์์์ ๊ฒฝ์ฐ์
Hi! by undefined
์์ ๊ฐ์ด undefined ๋ผ๋ ๊ฐ์ด ์ถ๋ ฅ์ด ๋๋ค ํ์ง๋ง ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ์ง์ ๋์ง ์์์ ๊ฒฝ์ฐ default ๊ฐ์ ์ง์ ํด์ค ์ ์๋๋ฐ
function showMessage(message, from = 'unknown'){
console.log(`${message} by ${from}`);
}
showMessage('Hi!');
์์ ๊ฐ์ด default ๊ฐ์ ์ง์ ํด๋์์ ๊ฒฝ์ฐ unknown ์ด๋ผ๋ ๊ฐ์ด ์ถ๋ ฅ์ด ๋๋ค!
Function์ ๋ฐฐ์ด์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ
function์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ผ๋ ค๋ฉด
function printAll(...args) {
for(let i = 0; i < arg.length; i++) {
console.log(args[i]);
}
}
printAll('A', 'B', 'C');
์์ ๊ฐ์ด ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์์ ... ์ ๋ถ์ฌ์ผํ๋ค๊ณ ๋ฐฐ์ ๋ค
๋ for ๋ฐ๋ณต๋ฌธ์ ๋ค๋ฅด๊ฒ๋ ์ธ ์ ์๋ค
for (const arg of args){
console.log('arg');
}
์์๊ฐ์ด ์ด๋ ๊ฒ of๋ฅผ ์ฐ๊ฑฐ๋ ๋ ๊ฐํธํ ๋ฐฉ๋ฒ์
args.forEach((arg) => console.log(arg));
์์๊ฐ์ด forEach๋ผ๋ ํจ์ํ ์ธ์ด๋ฅผ ์ด์ฉํด๋ ๋๋ค
โ
์ ๋ค ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ ๊ฐ์๋ฐ ์์ง๊น์ง๋ ์ ์๋๋ก for๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํธํด์ ๋ง์ด ๊ณต๋ถํด์ผ ํ ๊ฒ ๊ฐ๋ค
Early return, early exit
ํ์ ์์ ์์ฃผ ์ฐ์ด๋ ํ์์ผ๋ก ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ฝ๋๋ฅผ ๋์ฑ ์ ๊ฒ ์ฐ๊ธฐ ์ํด ์ฐ๋ ๋ฐฉ์์ด๋ค
function upgradeUser(user) {
if(user.point > 10) {
elseif ... else
}
}
์์ ๊ฐ์ ํ์์ผ๋ก ์์ฑํ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด if๋ฌธ์ 10 ๋ณด๋ค ํด ๊ฒฝ์ฐ์ ์กฐ๊ฑด๋ฌธ์ ์คํํ๋ ๋ฐฉ์์ด๊ณ ์๋ ๊ฒฝ์ฐ
elseif .. else ๊น์ง ์ด์ด์ ธ์ ๋ก์ง์ด ๊ธธ์ด์ง๊ฒ ๋๋๋ฐ ์ด๋ ๊ฒ ํ๊ธฐ๋ณด๋ค๋
function upgradeUser(user) {
if(user.point <= 10) {
return;
}
// long upgrade logic ...
}
์์ ์ฝ๋์ฒ๋ผ ์กฐ๊ฑด๋ฌธ์ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ ๋นจ๋ฆฌ ๋ฆฌํด์ ํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ์กฐ๊ฑด๋ฌธ์์ ๋ฒ์ด๋
long upgrade logic ์์ ์กฐ๊ฑด์ด ์คํ์ด ๋๋ ํ์์ด๋ค
Function expression
์์์ function์ ์ ์ธํ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ์๋์ ๊ฐ์ด ์ ์ธ์ ํ ์๋ ์๋ค.
const print = function() {
console.log('print');
};
print();
์์ ๊ฐ์ด function ์ ์ ์ธํจ๊ณผ ๋์์ print๋ผ๋ ๋ณ์์ ํ ๋น์ ํ๊ฒ ๋๋ฉด print๋ผ๋ ์ด๋ฆ์ผ๋ก function์ ํธ์ถํ ์ ์๊ฒ ๋๋ค
์์ ๊ฐ์ด function์ ์ด๋ฆ ์์ด ์ ์ธํ๋ ๊ฒ์ anonymous function ์ด๋ผ๊ณ ํ๊ณ ์ด๋ฆ์ ์ง์ ํด์ ์ ์ธํ๋ ๊ฒ์ named function ์ด๋ผ๊ณ ํ๋ค
โ
๋ print๋ผ๋ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ ์๋ ์๋ค
const printAgain = print;
printAgain();
์ด๋ ๊ฒ print ๋ณ์๋ฅผ printAgain์ ํ ๋นํ๊ฒ ๋๋ฉด printAgain ๋ณ์๊ฐ ' print '๋ฅผ ์ถ๋ ฅํ๊ฒ ๋๋ค
โ
(์ดํดํ ์ ์๋ ์ด์ํ ์๋ฐ์คํฌ๋ฆฝํธ .... )
Callback
Callback ํจ์์ ์
function randomQuiz(answer, printYes, printNo) {
if(answer === 'love you') {
printYes();
}else {
printNo();
}
}
์์ ๊ฐ์ด answer์ ๊ฐ์ ๋ฐ์์ 'love you' ์ ๊ฐ๋ค๋ฉด printYes๋ฅผ , ๋ค๋ฅด๋ฉด printNo ๋ผ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๋ค
randomQuiz ํจ์๋ฅผ ํธ์ถํ ๋ answer์ printYes, printNo ๋ผ๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋ณ์๋ก ์ ๋ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ expression ๋ ๊ฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ค
const printYes = function () {
console.log('yes!');
};
const printNo = function print() {
console.log('no!');
};
randomQuiz('wrong', printYes, printNo);
randomQuiz('love you', printYes, printNo);
์์ ์ฝ๋์ฒ๋ผ printYes, printNo๋ฅผ expression ์ผ๋ก ์ ์ธํ์ฌ randomQuiz ํจ์๋ฅผ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์๋ก์ ํธ์ถ์ด ๋๋ค
โ
printYes๋ anonymous function์ด๊ณ ์ด๊ณ
printNo๋ named function์ธ๋ฐ printNo๋ print๋ผ๊ณ ํจ์์ ์ด๋ฆ์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค
์ด๊ฒ์ ๋๋ฒ๊น ์ ํ ๋ stack trace์ ํจ์์ ์ด๋ฆ์ด ๋์ค๊ธฐ ์ํจ์ด๋ผ๊ณ ํ๋ค.
๋๋ ์ฌ๊ท ํจ์๋ก ํธ์ถํ ๋์ ํ์ํ๋ค!
Arrow function
Arrow function์ ํญ์ ์ด๋ฆ์ด ์๋ anonymous function์ด๋ค.
function expression์ ๊ฐํธํ๊ฒ ํด์ฃผ๋ ์์ด๋ผ๊ณ ์๊ณ ์์ผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค..!
โ
โ
์ดํด๊ฐ ์ฝ๋๋ก ์์์ ์ ์ธํ๋ function expression์ ๊ฐ์ ธ์์ ์์๋ฅผ ์์ฑํด๋ณด์
const printYes = function () {
console.log('yes!');
};
์ด๋ ๊ฒ ์์ฑ๋์ด์๋ function expression์ ์๋์ ๊ฐ์ด Arrow function์ผ๋ก ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
const printYes = () => console.log('yes!');
์ง์...!
โ
return์ ํด์ค์ผ ํ๋ function expression์ Arrow function์ผ๋ก ๋ฐ๊ฟ๋ณด๋ ์ฝ๋๋ ์์ฑํด๋ณด์
โ
const add = function (a, b) {
return a + b;
};
์์ ์ฝ๋๋ add๋ผ๋ ์ด๋ฆ์ function expression์ด๋ฉฐ ๋งค๊ฐ๋ณ์๋ก a์ b๋ฅผ ๋ฐ์ ๋ํด์ return ํ๋ ๊ฒ์ด๋ค
์ด๋ฅผ Arrow function์ผ๋ก ๋ฐ๊ฟ๋ณด์
const add = (a , b) => a + b;
์จ์....!
โ
ํจ์ ์์์ ๋ค๋ฅธ ์ผ๋ค์ด ํ์ํด์ ๋ธ๋ก { } ์ด ํ์ํ๋ค๋ฉด
const simpleMultiply = ( a , b ) => {
// do something more
return a * b;
};
์์ ๊ฐ์ด ๋ธ๋ก์ ๋ฃ์ด์ ์ฒ๋ฆฌํ ์ ์์ง๋ง ๋์ ๋ธ๋ญ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด return์ ์ด์ฉํด์ ๊ฐ์ return ํด์ค์ผ ํ๋ค!
โ
โ
์ด๋ ๊ฒ JavaScript์ ํจ์์ ์ ์ธ๊ณผ ํํ์ ์์๋ณด์๋๋ฐ ์์ ์ต์ ๋๊น์ง ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ๋ค
โ
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript (ES6) - Array APIs ์ด์ ๋ฆฌ - ( ์ ์ฉํ 10๊ฐ์ง ๋ฐฐ์ด ํจ์ ) (0) | 2021.05.23 |
---|---|
JavaScript (ES6) - Prototype (0) | 2021.05.20 |
JavaScript (ES6) - Array ๊ฐ๋ ๊ณผ APIs (0) | 2021.05.01 |
JavaScript (ES6) - Object (0) | 2021.05.01 |
JavaScript (ES6) - class ์ object ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ (0) | 2021.05.01 |