![[JavaScript] μ½λ°± ν¨μ(Callback Function)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAI4Df%2FbtsB1FriVXj%2FMU9kVv6O9yiKb6rkB1hRKk%2Fimg.png)
π μ½λ°± ν¨μλ 무μμΈκ°μ?
μ½λ°± ν¨μλ λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λμ΄, κ·Έ ν¨μμ λ΄λΆμμ μ€νλλ ν¨μμμ. μ΄λ νΉν λΉλκΈ° μμ μ μ²λ¦¬ν λ μ€μν μν μ ν΄μ. μ½λ°± ν¨μλ μ΄λ€ μ΄λ²€νΈκ° λ°μνκ±°λ νΉμ μμ μ΄ μλ£λ ν μ€νλλλ‘ μ€κ³λμμ΄μ.
λΉμ μ΄ μΉκ΅¬μκ² μ΄λ€ μΌμ΄ λλλ©΄ μ νν΄ λ¬λΌκ³ λΆννλ€κ³ μμν΄ λ³΄μΈμ. μ¬κΈ°μ λΉμ μ λΆνμ 'λ©μΈ ν¨μ'μ΄κ³ , μΉκ΅¬κ° λμ€μ μ ννλ νμλ 'μ½λ°± ν¨μ'μμ. μ΄λ κ² νΉμ μμ (μΌμ΄ λλλ κ²)μ΄ μλ£λ νμ μ€νλλλ‘ μμ½λ μΆκ° μμ (μ ννλ κ²)μ΄ λ°λ‘ μ½λ°± ν¨μμ κ°λ μ΄μμ.
π₯οΈ μ½λ°± ν¨μμ μ¬μ©
μ½λ°± ν¨μλ μλ°μ€ν¬λ¦½νΈμμ λ리 μ¬μ©λλ©°, νΉν μ΄λ²€νΈ 리μ€λ, νμ΄λ¨Έ ν¨μ, λΉλκΈ° μμ² μ²λ¦¬ λ±μμ μ€μν μν μ ν΄μ.
1. μ΄λ²€νΈ 리μ€λ
- μΉ νμ΄μ§μμ μ¬μ©μμ νΉμ νλ(μ: ν΄λ¦, ν€λ³΄λ μ λ ₯)μ λ°μνμ¬ ν¨μλ₯Ό μ€νν λ μ½λ°± ν¨μλ₯Ό μ¬μ©ν΄μ.
document.getElementById('myButton').addEventListener('click', function() {
console.log('λ²νΌμ΄ ν΄λ¦λμμ΅λλ€.');
});
document.getElementById('myButton')
μ μΉ νμ΄μ§μμ 'myButton'μ΄λΌλ IDλ₯Ό κ°μ§ μμλ₯Ό μ°Ύλ ν¨μμ λλ€..addEventListener('click', function() {...})
λ ν΄λΉ μμμ ν΄λ¦ μ΄λ²€νΈ 리μ€λλ₯Ό μΆκ°νλ λ©μλμ λλ€. μ΄ λ©μλλ 'click' μ΄λ²€νΈμ μ½λ°± ν¨μλ₯Ό μΈμλ‘ λ°μ΅λλ€.function() { console.log('λ²νΌμ΄ ν΄λ¦λμμ΅λλ€.'); }
λ μ½λ°± ν¨μλ‘, λ²νΌμ΄ ν΄λ¦λ λ μ€νλ©λλ€. μ΄ ν¨μλ ν΄λ¦ μ΄λ²€νΈκ° λ°μνλ©΄ μ½μμ "λ²νΌμ΄ ν΄λ¦λμμ΅λλ€."λΌλ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
2. νμ΄λ¨Έ ν¨μ
setTimeout
κ³ΌsetInterval
κ³Ό κ°μ νμ΄λ¨Έ ν¨μμμ μ§μ λ μκ°μ΄ μ§λ ν ν¨μλ₯Ό μ€νν λ μ½λ°± ν¨μλ₯Ό μ¬μ©ν΄μ.
function showMessage() {
console.log("μλ
νμΈμ!");
}
// 3μ΄ νμ showMessage ν¨μλ₯Ό νΈμΆ
setTimeout(showMessage, 3000);
showMessage
ν¨μλ κ°λ¨ν λ©μμ§λ₯Ό μ½μμ μΆλ ₯νλ ν¨μμ λλ€.setTimeout
ν¨μλ 첫 λ²μ§Έ μΈμλ‘ showMessage ν¨μ(μ½λ°± ν¨μ)λ₯Ό, λ λ²μ§Έ μΈμλ‘ μ§μ° μκ°(3000λ°λ¦¬μ΄, μ¦ 3μ΄)μ λ°μ΅λλ€.- 3μ΄ ν
setTimeout
μshowMessage
ν¨μλ₯Ό νΈμΆνκ³ , "μλ νμΈμ!"κ° μ½μμ μΆλ ₯λ©λλ€.
3. λΉλκΈ° μμ²
- μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό μμ²νκ³ μλ΅μ λ°μμ λ μ€νν μμ μ μ μνλ λ° μ½λ°± ν¨μλ₯Ό μ¬μ©ν΄μ.
fetch('https://example.com/data')
.then(response => response.json())
.then(data => console.log(data));
fetch('[https://example.com/data'):](https://example.com/data')
: URLλ‘λΆν° λ°μ΄ν°λ₯Ό λΉλκΈ°μ μΌλ‘ μμ²ν©λλ€..then(response => response.json())
: μλ²λ‘λΆν° λ°μ μλ΅μ JSON ννλ‘ λ³νν©λλ€. μ΄λ 첫 λ²μ§Έ μ½λ°± ν¨μμ λλ€..then(data => console.log(data))
: λ³νλ JSON λ°μ΄ν°λ₯Ό μ½μμ μΆλ ₯ν©λλ€. μ΄λ λ λ²μ§Έ μ½λ°± ν¨μμ λλ€.
thenμ fetchμ μ§μ μ μΈ μ½λ°± ν¨μκ° μλλΌ, fetchμ μν΄ λ°νλ Promise κ°μ²΄μ μ°κ²°λ μ½λ°± ν¨μμμ.
π€ μ½λ°± μ§μ₯κ³Ό κ·Έ ν΄κ²° λ°©λ²
μ½λ°± ν¨μμ κ³Όλν μ€μ²© μ¬μ©μ μ½λμ κ°λ
μ±μ λ¨μ΄λ¨λ¦¬κ³ , μ μ§λ³΄μλ₯Ό μ΄λ ΅κ² λ§λλ 'μ½λ°± μ§μ₯'μ μΌκΈ°ν μ μμ΄μ. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Promise
λ async/await
κ³Ό κ°μ νλμ μΈ μλ°μ€ν¬λ¦½νΈ κΈ°λ₯μ μ¬μ©ν μ μμ΄μ.
1. μ½λ°± μ§μ₯ μμ
getData(function(a){
getMoreData(a, function(b){
getMoreData(b, function(c){
getMoreData(c, function(d){
getMoreData(d, function(e){
// ...
});
});
});
});
});
2. Promise
λ₯Ό μ¬μ©ν ν΄κ²° λ°©λ²
- Promiseλ μ½λ°± μ§μ₯μ ν΄κ²°νλ λ° μ μ©ν΄μ. Promiseλ λΉλκΈ° μμ μ μμ°¨μ μΌλ‘ μ°κ²°ν μ μκ² ν΄ μ£Όμ΄ μ½λλ₯Ό λ κΉλνκ² λ§λ€ μ μμ΄μ.
getData()
.then(a => getMoreData(a))
.then(b => getMoreData(b))
.then(c => getMoreData(c))
.then(d => getMoreData(d))
.then(e => {
// ...
})
.catch(error => console.log(error));
3. async/await
λ₯Ό μ¬μ©ν ν΄κ²° λ°©λ²
- async/awaitλ Promiseλ₯Ό λμ± κ°κ²°νκ² μ¬μ©ν μ μκ² ν΄μ£Όλ ES8μ κΈ°λ₯μ΄μμ. async ν¨μ λ΄μμ await ν€μλλ₯Ό μ¬μ©νλ©΄ λΉλκΈ° μμ μ λκΈ°μ μΈ λ°©μμΌλ‘ μμ±ν μ μμ΄μ.
async function asyncFunction() {
try {
const a = await getData();
const b = await getMoreData(a);
const c = await getMoreData(b);
const d = await getMoreData(c);
const e = await getMoreData(d);
// ...
} catch (error) {
console.log(error);
}
}
π¨ μ£Όμν μ
μ½λ°± ν¨μλ₯Ό μ¬μ©ν λλ μ€μ²©μΌλ‘ μΈν 볡μ‘μ±(μ½λ°± μ§μ₯)μ νΌνκ³ , λΉλκΈ° μμ μμ λ°μν μ μλ μ€λ₯λ₯Ό μ μ ν μ²λ¦¬νλ κ²μ΄ μ€μν΄μ. λν, ν¨μμ μ€ν 컨ν μ€νΈμ `this` λ°μΈλ©μ μ£Όμνκ³ , λΉλκΈ° μμ μμ μ½λ°± ν¨μμ μ€ν μμλ₯Ό μ νν μ΄ν΄νλ κ²λ νμμ μ΄μμ. μ΄λ¬ν μ£Όμ μ¬νμ μΌλμ λλ©΄ μ½λ°± ν¨μλ₯Ό λ³΄λ€ ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μμ΄μ.
π κ²°λ‘
μ½λ°± ν¨μλ μλ°μ€ν¬λ¦½νΈμ ν΅μ¬μ μΈ λΆλΆμΌλ‘, νΉν λΉλκΈ° νλ‘κ·Έλλ°μμ μ€μν μν μ ν΄μ. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ νΉμ μμ
μ΄ μλ£λ νμ μΆκ° μμ
μ μνν μ μμΌλ©°, μ΄λ²€νΈ μ²λ¦¬, νμ΄λ¨Έ μ€μ , μλ² μμ² λ± λ€μν μν©μμ μ μ°νκ² μ½λλ₯Ό ꡬμ±ν μ μμ΄μ.
κ·Έλ¬λ μ½λ°± ν¨μμ κ³Όλν μ¬μ©μ μ½λμ 볡μ‘μ±μ μ¦κ°μν€κ³ , 'μ½λ°± μ§μ₯'μΌλ‘ μλ €μ§ μ μ§λ³΄μμ μ΄λ €μμ μ΄λν μ μμ΄μ. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νλ μλ°μ€ν¬λ¦½νΈλ Promiseμ async/awaitκ³Ό κ°μ ν¨ν΄μ μ 곡ν΄μ.
μ½λ°± ν¨μλ₯Ό μ¬μ©ν λλ ν¨μμ μ€ν 컨ν
μ€νΈμ this λ°μΈλ©μ μ£Όμ κΉκ² κ³ λ €ν΄μΌ νλ©°, λΉλκΈ° μμ
μμ λ°μν μ μλ μμΈ μν©μ μ μ ν μ²λ¦¬νλ κ²μ΄ μ€μν΄μ.
κ²°λ‘ μ μΌλ‘, μ½λ°± ν¨μλ κ·Έ μ¬μ©λ²μ μ νν μ΄ν΄νκ³ μ μ ν νμ©νλ κ²μ΄ μ€μν΄μ. μ΄λ₯Ό ν΅ν΄ λμ± ν¨μ¨μ μ΄κ³ μ μ§λ³΄μκ° μ©μ΄ν μ½λλ₯Ό μμ±ν μ μμ΄μ.
π μΆκ° μ 보
- μλ°μ€ν¬λ¦½νΈμ μ½λ°± ν¨μμ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, MDN Web Docsμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
'Language > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] ES6 (0) | 2024.01.25 |
---|---|
[JavaScript] async/await (0) | 2023.12.15 |
[JavaScript] μ°μ°μ (0) | 2023.12.14 |
[JavaScript] λ°μ΄ν° ν (0) | 2023.12.13 |
[JavaScript] λ³μ (0) | 2023.12.13 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!