![[JavaScript] ν΄λ‘μ ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpQK2M%2FbtsF2NS5u1Y%2FG0vR7Z9eKOhBS8eBJonaK1%2Fimg.png)
π ν΄λ‘μ λ 무μμΈκ°μ?
ν΄λ‘μ λ ν¨μμ κ·Έ ν¨μκ° μ μΈλ λμ λ μ컬 νκ²½κ³Όμ μ‘°ν©μ΄μμ. μ΄λ λ΄λΆ ν¨μκ° μΈλΆ ν¨μμ μ€μ½νμ μ κ·Όν μ μκ² ν΄ μ£Όλ©°, μΈλΆ ν¨μκ° μ€νμ λ§μΉ νμλ μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μκ² ν΄μ.
ν΄λ‘μ λ 'λ°±ν©'μ λΉμ ν μ μμ΄μ. ν¨μκ° μ€νλ λλ§λ€, κ·Έ ν¨μλ μμ λ§μ 'λ°±ν©'μ κ°μ§κ² λΌμ. μ΄ 'λ°±ν©' μμλ ν¨μκ° μμ±λ λμ νκ²½, μ¦ μΈλΆ ν¨μμ λ³μλ€μ΄ λ€μ΄ μμ΄μ. ν¨μκ° μ΄λλ‘ κ°λ , μ΄ 'λ°±ν©'μ λ€κ³ λ€λλ©΄μ νμν λλ§λ€ μΈλΆ ν¨μμ λ³μλ€μ μ¬μ©ν μ μκ² λμ£ .
π₯οΈ ν΄λ‘μ μ μ¬μ©
1. λ°μ΄ν° μλκ³Ό μΊ‘μν
- ν΄λ‘μ λ₯Ό μ¬μ©νλ©΄, ν¨μ μΈλΆμμ μ κ·Όν μ μλ private λ³μλ₯Ό λ§λ€ μ μμ΄μ. μ΄λ λ°μ΄ν° μλκ³Ό μΊ‘μνλ₯Ό κ°λ₯νκ² ν΄μ.
function createCounter() {
let count = 0;
return {
increase: function() { count++; },
getCount: function() { return count; }
};
}
const counter = createCounter();
counter.increase();
console.log(counter.getCount()); // 1
μ΄ μμ μμ ν΄λ‘μ λ 'createCounter' ν¨μλ‘λΆν° λ°νλ 'increase'μ 'getCount' ν¨μμ λλ€.
μ΄ ν¨μλ€μ 'createCounter'μ μ§μ λ³μ 'count'μ μ κ·Όν μ μκ² ν΄ μ£Όλ©°, μ΄ λ³μλ₯Ό μΈλΆλ‘λΆν° μ¨κΈ°κ³ 보νΈνλ μν μ ν©λλ€.
2. μν μ μ§
- ν΄λ‘μ λ ν¨μκ° νΈμΆλ λλ§λ€ μνλ₯Ό μ μ§ν μ μκ² ν΄μ. μ΄λ λ°λ³΅λλ μμ μ΄λ μ΄λ²€νΈ μ²λ¦¬μ μ μ©νκ² μ¬μ©λ μ μμ΄μ.
function createUniqueIdGenerator() {
let id = 0;
return function() {
return ++id;
};
}
const generateId = createUniqueIdGenerator();
console.log(generateId()); // 1
console.log(generateId()); // 2
μ¬κΈ°μ ν΄λ‘μ λ 'createUniqueIdGenerator' ν¨μκ° λ°ννλ μ΅λͺ ν¨μλ‘, 'id' λ³μμ κ°μ κΈ°μ΅νκ³ κ° ν¨μ νΈμΆ μ¬μ΄μ μ΄ κ°μ μ μ§ν©λλ€.
μ΄λ₯Ό ν΅ν΄ ν¨μκ° νΈμΆλ λλ§λ€ κ³ μ ν ID κ°μ μμ±νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
π€ ν΄λ‘μ μ μμ©
ν΄λ‘μ λ λ¨μν λ°μ΄ν° μλμ΄λ μν μ μ§λΏλ§ μλλΌ, λ€μν λ°©μμΌλ‘ μμ©λ μ μμ΄μ.
1. μ½λ°± ν¨μμμμ μν μ μ§
- ν΄λ‘μ λ λΉλκΈ° μ½λ°± ν¨μμμ νΉμ λ°μ΄ν°μ μνλ₯Ό μ μ§νλ λ° μ¬μ©λ μ μμ΄μ. μ΄λ λΉλκΈ° μμ μ΄ μλ£λ νμλ νΉμ λ°μ΄ν°μ μ κ·Όν΄μΌ ν λ μ μ©ν΄μ.
function fetchDataWithCache(url) {
const cache = {};
return function(callback) {
if (cache[url]) {
callback(cache[url]); // μΊμλ λ°μ΄ν° λ°ν
} else {
fetchData(url, function(data) {
cache[url] = data; // λ°μ΄ν° μΊμ±
callback(data);
});
}
};
}
const fetchWithCache = fetchDataWithCache();
fetchWithCache('https://api.example.com/data', function(data) {
console.log('Received data:', data);
});
μ΄ μμ μμ 'fetchDataWithCache' ν¨μλ ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ 'cache' κ°μ²΄μ μνλ₯Ό μ μ§ν©λλ€.
μ΄λ₯Ό ν΅ν΄ λμΌν URLλ‘ λ°μ΄ν°λ₯Ό μμ²ν λλ§λ€ λ€νΈμν¬ μμ²μ μ€μ΄κ³ μΊμ λ λ°μ΄ν°λ₯Ό μ¬μ¬μ©ν μ μμ΅λλ€.
2. λͺ¨λ ν¨ν΄
- ν΄λ‘μ λ μλ°μ€ν¬λ¦½νΈμμ λͺ¨λ ν¨ν΄μ ꡬννλ λ° μ¬μ©λ μ μμ΄μ. μ΄λ₯Ό ν΅ν΄ κ³΅κ° APIμ λΉκ³΅κ° λ³μ λ° ν¨μλ₯Ό λΆλ¦¬ν μ μμ΄μ.
const myModule = (function() {
let privateVar = 'λΉλ°';
function privateFunction() {
console.log('λΉκ³΅κ° ν¨μ');
}
return {
publicMethod: function() {
console.log('κ³΅κ° λ©μλ');
console.log(privateVar);
privateFunction();
}
};
})();
myModule.publicMethod(); // κ³΅κ° λ©μλμ λΉκ³΅κ° λ³μ λ° ν¨μμ μ κ·Ό κ°λ₯
μ΄ ν¨ν΄μμ ν΄λ‘μ λ λͺ¨λμ λΉκ³΅κ° λ©€λ²λ₯Ό μΈλΆλ‘λΆν° μ¨κΈ°λ λμμ, κ³΅κ° APIλ₯Ό ν΅ν΄ μ κ·Όν μ μκ² ν©λλ€.
3. ν¨μ 컀λ§(Currying)
- ν΄λ‘μ λ ν¨μ 컀λ§μλ μ¬μ©λ μ μμ΄μ. 컀λ§μ ν¨μμ μΈμλ₯Ό λΆν νμ¬, κ° μΈμλ₯Ό λ°λ λ¨κ³λ§λ€ μλ‘μ΄ ν¨μλ₯Ό λ°ννλ κΈ°λ²μ΄μμ.
function multiply(a) {
return function(b) {
return a * b;
};
}
const double = multiply(2);
console.log(double(5)); // 10
'multiply' ν¨μλ ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ μ²« λ²μ§Έ μΈμ 'a'μ μνλ₯Ό μ μ§ν©λλ€.
μ΄ν 'double' ν¨μλ 'multiply(2)'μ κ²°κ³Όλ‘ μμ±λλ©°, μ΄ ν¨μμ μΈμλ₯Ό μ λ¬νλ©΄ '2'μ κ·Έ μΈμμ κ³±μ λ°νν©λλ€.
π¨ μ£Όμν μ
- ν΄λ‘μ λ λ©λͺ¨λ¦¬ λμλ₯Ό μΌμΌν¬ μ μμΌλ―λ‘, μ¬μ©νμ§ μλ ν΄λ‘μ λ μ μ ν μ²λ¦¬ν΄μΌ ν΄μ.
- ν΄λ‘μ λ΄λΆμ λ³μλ μΈλΆμμ μ§μ μ κ·Όν μ μμΌλ―λ‘, λ³μλ₯Ό μ‘°μνλ €λ©΄ ν¨μλ₯Ό ν΅ν΄ μ κ·Όν΄μΌ ν΄μ.
π κ²°λ‘
ν΄λ‘μ λ μλ°μ€ν¬λ¦½νΈμμ κ°λ ₯ν κΈ°λ₯μ μ 곡ν©λλ€. λ°μ΄ν° μλ, μν μ μ§, λͺ¨λ ν¨ν΄ ꡬν λ± λ€μν μν©μμ μ μ©νκ² μ¬μ©λ μ μμ΅λλ€. ν΄λ‘μ λ₯Ό μ΄ν΄νκ³ μ¬λ°λ₯΄κ² μ¬μ©νλ κ²μ μλ°μ€ν¬λ¦½νΈ κ°λ°μλ‘μ μ€μν λ₯λ ₯ μ€ νλμ λλ€.
π μΆκ° μ 보
- μλ°μ€ν¬λ¦½νΈμ ν΄λ‘μ μ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, MDN Web Docsμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
'Language > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄ (0) | 2024.10.02 |
---|---|
[JavaScript] ꡬ쑰 λΆν΄ ν λΉ(Destructuring) (0) | 2024.04.21 |
[JavaScript] this (1) | 2024.03.18 |
[JavaScript] ES6 (0) | 2024.01.25 |
[JavaScript] async/await (0) | 2023.12.15 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!