๐ ์ผ๊ธ๊ฐ์ฒด(First Class Object)์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์์๋ณด์
ํ๋ก ํธ์๋ ์ ์
๋ฉด์ ์์ First Class Object
๊ฐ ๋ฌด์์ธ์ง ์ค๋ช
ํด์ฃผ์ธ์.๋ผ๋ ์ฒซ ์ง๋ฌธ์ ๋ฃ๊ณ ๋จธ๋ฆฌ๊ฐ ๋ฒ์ช๋ค. ์ฉ์ด๋ฅผ ๋ค์ด๋ดค์ผ๋ฉด ๊ด๋ จ๋ ๋ด์ฉ์ ์ฅ์ด์ง๋ด๊ธฐ๋ผ๋ ํ ํ
๋ฐ ๋๋ฌด์ง ์๊ฐ์ด ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ต๋ตํจ์ ์ด๊ธฐ์ง ๋ชปํ๊ณ ๋ฉด์ ๊ด๋ถ๊ป ์์ํ๊ฒ ๋ง์๋๋ ธ๋ค. ๊ทธ๋ฐ ์ฉ์ด๋ฅผ ์ฒ์ ๋ฃ์ต๋๋ค.. ํ๊ธ๋ก ์ฐ์ด๋ ๋ง์ด ๋ฐ๋ก ์์ต๋๊น? ๊ณต๋ถ๋ฅผ ๋ ํด์ผ๊ฒ ์ต๋๋ค.. ์ด์ฝ๊ณ ๋ฉด์ ๊ด๋์ ์์ผ๋ฉฐ ์ผ๊ธ ๊ฐ์ฒด์ ๋ํด ์์ธํ ์ค๋ช ์ ํด์ฃผ์ จ๋ค. ๋ง์นจ๋ด ๋ฐ๋ ค์ค๋ ์๊ดด๊ฐ..
๋น๋ก ๋ฉด์ ์ ๋จ์ด์ง ์ด์ ๊ฐ ์ผ๊ธ๊ฐ์ฒด๋ฅผ ๋ชฐ๋ผ์ ๋จ์ด์ง ๊ฒ์ ์๋์ง๋ง JS
์ ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋ง์ด ๊ณต๋ถํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ทธ๋์ ์์๋ณด์ ์ผ๊ธ๊ฐ์ฒด(First class object
)๋ ๋ฌด์์ธ๊ฐ?
MDN
์์ ์ฐพ์๋ณด๋๊น ๋ค์๊ณผ ๊ฐ์ ์ ์๊ฐ ๋์จ๋ค. ํจ์
๋ฅผ ๋ณ์์ฒ๋ผ ๋ค๋ฃจ๋ ์ธ์ด๋ ์ผ๊ธ ํจ์๋ฅผ ๊ฐ์ก๋ค๊ณ ํํํ๋ค. ์ด ๋ฌธ์ฅ์ ๋ณด๊ณ ๋ฐ๋ก ํจ์ ํํ์
์ด ์๊ฐ๋ฌ๋ค. ํจ์ ํํ์๊ณผ ํจ์ ์ ์ธ์์ ์ฐจ์ด๋ ์๋ค๊ณ ์ฐ์ญ๋์ง๋ง ์ ์ ์ผ๊ธ๊ฐ์ฒด
๋ฅผ ๋ชจ๋ฅด๋ ๋..
์ด์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋ง์กฑํ๋ฉด ์ผ๊ธ ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฝ๋์ ํจ๊ป ์ดํด๋ณด์.
1. Functions can be assigned to variables: ํจ์๋ฅผ ๋ณ์์ฒ๋ผ ์ ์ธํ ์ ์๋๊ฐ?
// 1
const sayMyName = function(name){
console.log(name);
}
myName("Ted");
๐๐ฝ Ted
// 2
const sayMyName = (name) => {
return name
}
console.log(sayMyName("Ted"));
๐๐ฝ Ted
2. Functions can be passed to arguments to other functions: ํจ์์ ์ธ์๋ก ํจ์๋ฅผ ๋ฃ์ ์ ์๋๊ฐ?
const sayHelloToPerson = (greet, person) => {
return greet() + " " + person
}
const sayGreet = function(){
return "Hello,"
}
console.log(sayHelloToPerson(sayGreet, "Ted"));
๐๐ฝ Hello, Ted
3. Functions can be returned from other functions: ํจ์์ ๋ฆฌํด ๊ฐ์ผ๋ก ํจ์๋ฅผ ์ฌ์ฉ ํ ์ ์๋๊ฐ?
const sayHello = function(){
return function(greet){
return greet
}
}
const sayHelloOuter = sayHello();
const sayHelloInner = sayHelloOuter("Hello");
console.log(sayHelloInner)
๐๐ฝ Hello
// closure๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ
const sayYouAndMe = function(yourName){
return function(myName){
return yourName + "๊ณผ " + myName;
}
}
const sayYourName = sayYouAndMe("elon");
const sayMyName = sayYourName("Ted");
console.log(sayMyName);
๐๐ฝ elon๊ณผ Ted
reference
๋๊ธ