2023. 8. 1. 13:36ใ2. JS๋ฌธ๋ฒ ์ข ํฉ
์ผ๊ธ ๊ฐ์ฒด๋ก์์ ํจ์
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด (First-Class Object) ๋ผ๊ณ ํ๋ค. ๊ทธ๋์ ํจ์๋ฅผ ๊ฐ์ฒด ์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค.
์ผ๋ฐ ๊ฐ์ฒด์ ๋ฌ๋ฆฌ ํจ์๋ ํน๋ณํ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์๋ค. ํจ์๊ฐ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ํจ์๋ฅผ ๋งค์ฐ ์ ์ฐํ๊ฒ ์ฌ์ฉ ํ ์ ์๋ค. ๊ทธ๋์ ์๋ฐ ์คํฌ๋ฆฝํธ์์๋ ํจ์๋ฅผ ๋งค์ฐ ์ค์ํ ๊ฐ๋ * ์ผ๋ก ๋ณธ๋ค.
์ผ๊ธ๊ฐ์ฒด(First-class Object)๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํ ์ฐ์ฐ์ ๋ชจ๋ ์ง์ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค. [์ํค๋ฐฑ๊ณผ]
ํจ์๊ฐ ์ผ๊ธ ๊ฐ์ฒด๋ก ์ทจ๊ธ๋๋ 5๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด์ ์์๋ณด์.
- 1. ๋ณ์์ ํจ์๋ฅผ ํ ๋น
: ํจ์๋ ๋ณ์์ ํ ๋นํ ์ ์๋ค. ํจ์๋ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์์ ํ ๋นํ ์ ์๋ค. ๋ณ์์ ํ ๋น๋ ํจ์๋ ๋์ค์ ์ฌ์ฉํ ์ ์๋ค.
const sayHello = function() {
console.log('Hello!');
};
sayHello(); // "Hello!" ์ถ๋ ฅ
hello!
- 2. ํจ์๋ฅผ ์ธ์๋ก ๋ค๋ฅธ ํจ์์ ์ ๋ฌ
ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ์ ์๋ค. ํจ์๊ฐ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ค. ์ด๊ฒ์ ์ฝ๋ฐฑ(callback)์ด๋ ๊ณ ์ฐจ ํจ์(higher-order function)๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
1) ์ฝ๋ฐฑํจ์ : ์ฝ๋ฐฑ ํจ์๋ ์ด๋ ํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ฐ์ด๋ ํจ์๋ฅผ ๋งํ๋ค.
2) ๊ณ ์ฐจํจ์(Higher-Order Function) : ๊ณ ์ฐจ ํจ์๋ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ์ถ๋ ฅ์ผ๋ก ๋ฐํํ๋ ํจ์๋ฅผ ๋งํ๋ค. ( = ํจ์๋ฅผ ๋ค๋ฃจ๋ ํจ์) ์ ๋ฆฌํ๋ฉด ์ฝ๋ฐฑํจ์๋ ๊ณ ์ฐจํจ์๋ผ๊ณ ๋ ํ ์ ์๋ค.
function callFunction(func) {
func();
}
const sayHello = function() {
console.log('Hello!');
};
callFunction(sayHello); // "Hello!" ์ถ๋ ฅ
hello!
- 3. ํจ์๋ฅผ ๋ฐํ
ํจ์๋ ๋ค๋ฅธ ํจ์์์ ๋ฐํ๋ ์ ์๋ค. ํจ์๋ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํจ์์์ ๋ฐํํ ์ ์๋ค. ์ด๊ฒ์ ํจ์ ํฉํ ๋ฆฌ(factory)๋ ํด๋ก์ (closure)๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
function createAdder(num) {
return function(x) {
return x + num;
}
}
const addFive = createAdder(5);
console.log(addFive(10)); // 15 ์ถ๋ ฅ
- 4. ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํจ์๋ฅผ ํ ๋น
ํจ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํ ๋น๋ ์ ์๋ค. ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
const person = {
name: 'John',
sayHello: function() {
console.log(`Hello, my name is ${this.name}`);
}
};
person.sayHello(); // "Hello, my name is John" ์ถ๋ ฅ
hello, my name is john
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ( ๋ฐฑํฑ('') ๊ณผ ๊ธฐํธ ${} ) ๋ฅผ ์ฌ์ฉํ์ฌ ํํํด๋ณด๊ธฐ
: +(ํ๋ฌ์ค) ์ฐ์ฐ์ ์์ด ํ ํ๋ฆด ๋ฆฌํฐ๋ด์ ๋ฐฑํฑ('') ๊ณผ ๊ธฐํธ ${} ์ฌ์ฉํ์ฌ ๋์ผํ๊ฒ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ค๋๋ก ํ ์ ์๋ค.
const person = {
name : 'john',
age : 31,
isMarried : true,
sayhello: function() {
// console.log("hello, my name is " + this.name);
console.log(`Hello, My name is ${this.name}`);
},
};
// ์๋จ์์ ๋งํ๋ this -> person ์ ๋งํ๋ค.
person.sayhello();
Hello, My name is john

์ผ์ชฝ ์์์๊ฐ์ด, ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ์์ผ๋
๊ฒฐ๊ณผ๊ฐ์ ๋ณด๋ฉด undefind๋ก ํ์ธ ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
ํ์ดํ ํจ์๋ this๋ฅผ ๋ฐ์ธ๋ฉ ํ์ง์๋๋ค.
- 5. ๋ฐฐ์ด์ ์์๋ก ํจ์๋ฅผ ํ ๋น
ํจ์๋ ๋ฐฐ์ด์ ์์๋ก ํ ๋น๋ ์ ์๋ค. ์ด๊ฒ์ ํจ์๋ฅผ ๋ฐฐ์ด์์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
const myArray = [
function(a, b) {
return a + b;
},
function(a, b) {
return a - b;
}
];
console.log(myArray[0](5, 10)); // 15 ์ถ๋ ฅ
console.log(myArray[1](10, 5)); // 5 ์ถ๋ ฅ


