๊นํ๋ธ๋ฅผ ๋์๋ค๋๋ค๊ฐ ์์ ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ธํฐ๋ทฐ ์ง๋ฌธ์ด๋ผ๋ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ณธ์ ์ด ์๋ค. ์ฌ์ค ๊ทธ ๋น์์๋ ๊ทธ๋ฅ ์คํ๋ง ๋๋ฌ๋๊ณ ํฐ ๊ด์ฌ์ด ์์์ง๋ง ์ง๊ธ๋ถํฐ ํ๋์ฉ ํ์ด๋ณด๋ ค ํฉ๋๋ค.
๋ฌผ๋ก ๋ง์ ๋ต๋ค์ด ์ด๋ฏธ ์ด ๋ ํฌ์งํ ๋ฆฌ์ ์์ฑ๋์ด ์๊ธด ํ๋ฐ, ์์ฑ๋์ง ์์ ๊ฒ๋ค๋ ์๊ณ ๋ด ๋ต์ด๋ ๋ชจ๋ฒ๋ต์์ ๋น๊ตํ๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์์ ํ๋ฒ ํ์ด๋ณด๋ ค ํฉ๋๋ค.
๊ธฐ์กด ๋ ํฌ์งํ ๋ฆฌ์๋ ๋ฌธ์ ์ ๋ถ๋ฅ๊ฐ ์๋์ ๊ฐ์ด ๋์ด์์ต๋๋ค.
๋งค์ผ 1๊ฐ์ง์ฉ ๋์๊ฐ๋ฉฐ ํ ๊ฑด๋ฐ, General Questions ํญ๋ชฉ์์ ๋๋ฌด ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ ํ์ง ์์ ๊ฒ์ด๋ค. ๋๋ฌด ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ์ ์๋ ์ฌ๋๋ง๋ค ๋ต์ด ๋ค๋ฅผ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
์ด๋ฅผํ ๋ฉด...
What did you learn yesterday/this week? (์ด์ /์ด๋ฒ์ฃผ์ ๋ฌด์์ ๋ฐฐ์ ๋์)
What excites or interests you about coding? (๋ฌด์์ด ๋น์ ์ ์ฝ๋ฉํ๊ณ ์ถ๊ฒ ๋ง๋๋์?)
What is a recent technical challenge you experienced and how did you solve it?(์ต๊ทผ์ ๊ฒช์ ๊ธฐ์ ์ ์ธ ์ด๋ ค์๊ณผ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์๋ ค์ฃผ์ธ์)
์ด๋ฌํ ๊ฒ๋ค์ ๋ต๋ณํ์ง ์์ต๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ ๊ทธ๋๊ทธ๋ ๋ต์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๋์ ๋ต๋ณ์ ๋์ ํ๋ฅ ๋ก ํ๋ฆด ์๋ ์์ผ๋ฉฐ, ์๋๋ฉด ๋ง๊ฒ ๊ฐ๋ค๊ฐ ์ค๊ฐ์ ์ด์ํ ๊ธธ๋ก ๋น ์ง ์๋ ์๋ค. ๋๊ธ์ ์์ ๋ง์ ๋ต์ ์ฌ๋ ค์ฃผ๋ฉด ๋งค์ฐ ๊ณ ๋ง์ธ ๊ฒ ๊ฐ์ต๋๋ค.
What is a closure, and how/why would you use one?
ํด๋ก์ ๋ ํจ์๊ฐ ์ ์ธ๋ ๋ ์์ปฌ ํ๊ฒฝ๊ณผ ํจ์์ ์กฐํฉ์ ๋๋ค. "๋ ์์ปฌ"์ด๋ ๋จ์ด๋ ๋ ์์ปฌ ์ค์ฝํ์ด ์์ค์ฝ๋ ๋ด์์ ๋ณ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณณ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ๋ณ์๊ฐ ์ ์ธ๋ ์์น๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ฐธ์กฐํฉ๋๋ค. ํด๋ก์ ๋ ๋ด๋ถ ํจ์๋ก ์ธ๋ถ ํจ์์ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ํจ์๋ฅผ ๋งํฉ๋๋ค. ํด๋ก์ ๋ ์ธ๋ถ ํจ์๊ฐ ๋ฐํ๋ ํ์๋ ์ธ๋ถ ํจ์์ ๋ณ์ ๋ฒ์ ์ฒด์ธ์ ์ ๊ทผํ ์ ์๋ ํจ์์ ๋๋ค.
์๋๋ MDN์ ์๋ Closure์ ์์ ์ฝ๋์ ๋๋ค.
function makeFunc() {
var name = 'Mozilla';
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
์ผ๋ฐ์ ์ผ๋ก ํจ์๊ฐ ๊ฐ์ ๋ฐํํ ์ดํ์๋ ๋ค์ ๊ทธ ํจ์์ ๋ด๋ถ ๋ณ์์ ์ ๊ทผํ ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ Closure๋ฅผ ๊ตฌ์ฑํ๋ฉด ๊ฐ๋ฅํฉ๋๋ค. ํด๋ก์ ๋ ๋ง๋ค์ด์ง ์์ ์์ ํ๊ฒฝ์ ์กด์ฌํ๋ ์ง์ญ ๋ณ์๋ค์ ๊ธฐ์ตํฉ๋๋ค. ์์์๋ makeFunc
๊ฐ ๋์ํ ๋, myFunc
๋ displayName
์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ต๋๋ค. displayName
์ ์ธ์คํด์ค๋ name
๋ณ์๊ฐ ๋ค์ด์๋ ์์ ์ ๋ ์์ปฌ ํ๊ฒฝ์ ๊ธฐ์ตํฉ๋๋ค.
Function Factory๋ ์ด๋ค ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ ํจ์ ๊ณต์ฅ์ ๋๋ค.
function makeAdder(x){
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2));
console.log(add10(2));
var myCounterModule = (function() {
var counter = 0;
return {
increase: function() {
alert(++counter);
},
decrease: function() {
alert(--counter);
},
getCounter: function() {
alert(counter);
return counter;
}
}
})();
์๋ ์ซ์๋ฅผ ์ธ์ด์ฃผ๋ ์นด์ดํฐ์ ๋๋ค. ๋๊ตฌ๋ counter๋ผ๋ ๋ณ์์ ์ง์ ์ ๊ทผ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ๋ฉ์๋๋ฅผ ํตํ์ฌ ํด๋น ๊ฐ์ ๋ํ๊ฑฐ๋ ๋บ ์ ์์ต๋๋ค.
์์ ํจํด์ IIFE๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
์ปค๋ง์ ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ ์งํํ๋ ํจ์๋ฅผ ๊ฐ ํ๋์ ์ธ์๋ฅผ ๊ฐ๊ณ ์๋ ํจ์๋ค๋ก ๋ณํํ๋ ํ ํฌ๋์ ์๋ฏธํฉ๋๋ค.
function addTwo(a, b) {
return a + b;
}
addTwo(1, 2); // 3
function addTwo(a) {
return function (b) {
return a + b;
};
}
addTwo(1)(2); // 3
๋ ์ฝ๋ ์ค ์์ ๊ฒฝ์ฐ๊ฐ ์ผ๋ฐ์ ์ธ ํจ์์ด๊ณ ์๋์ ๊ฒฝ์ฐ๊ฐ ์ปค๋ง์ ์ ์ฉํ ํจ์์ ๋๋ค.
'์ด ์งํด์ ์ด๋ฐ ์จ๋จน๋?' ํ๋ ๋ถ๋ค์ด ์์ ์ ์๋๋ฐ ์๋ ๋งํฌ๋ฅผ ์ฐธ์กฐํ๋ฉด ์ข์ต๋๋ค.
https://www.facebook.com/notes/kevin-lee/currying-%EC%96%B4%EB%94%B0-%EC%8D%A8%EB%A8%B9%EB%83%90%EA%B5%AC%EC%9A%94/214522735556858/
์์ ๋งํฌ์๋ ๋์์์ง๋ง,
function addInfiteArguments(a) {
return function (b) {
if(typeof b === 'number')
return addTest(a + b);
return a;
}
}
addInfiteArguments(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)(); // 55