์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ethernet
- ๋ฐฑ์ค#9375#ํจ์ ์์ ํด๋น
- 7785#ํ์ฌ์์๋์ฌ๋#์๊ณ ๋ฆฌ์ฆ๋ฌธ์
- ๋ผ
- 2667
- ๋ฐฑ์ค
- ๊น๋ฏผํ์ ํ๋ก ํธ์๋ ์์นด๋ฐ๋ฏธ
- mainํจ์
- DFS
- Today
- Total
(์๊ทผ์๊ทผ)
[JS] ์ฝ๋ฐฑํจ์ ๋ณธ๋ฌธ
๐ฒ callbackํจ์๋
javascript์ฝ๋ฐฑ ํจ์๋ ์ด๋ฆ ๊ทธ๋๋ก ๋์ค์ ํธ์ถ๋๋ ํจ์๋ฅผ ๋งํ๋ค.
๋ฌธ๋ฒ์ ํน์ง์ด ๋ฐ๋ก ์กด์ฌํ๋๊ฒ ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์์ผ ๋ฟ์ด๋ค.
MDN ์ ์์ ๋ฐ๋ฅด๋ฉด ์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ ํจ์์ด๋ฉฐ, ์ธ๋ถ ํจ์ ๋ด์์ ์ผ์ข ์ ๋ฃจํด ๋๋ ๋์์ ์คํํ๊ธฐ ์ํด ํธ์ถ๋๋ค.
๐คฆ๐ป CallBack ํจ์์ ์์
์ฝ๋ฐฑํจ์๋ผ ํด์ ์ด๋ง๋ฌด์ํ ํจ์๋ผ๊ณ ์๊ฐํ ํ์์๋ค,
์๋ฅผ ๋ค์ด ์ฝ๋ฐฑํจ์์ ๋ํ์ ์ธ ์ฌ์ฉ์ addEventListener์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๋ค ๋ฒํผ์ด ํด๋ฆญ๋์์ ๋ ์ฝ์ ์ฐฝ์ ๋ฒํผ์ด ํด๋ฆญ๋์์ ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์๋๋๊ฒ ํด๋ณด์
<!DOCTYPE html>
<head>...์๋ต<head>
<body>
<div>
<button id='log_button'>๋ก๊ทธ์ถ๋ ฅ</button>
</div>
</body>
<script>
const button = document.getElementId('log_button');
//์ต๋ช
ํจ์๋ก์จ ์ฝ๋ฐฑํจ์ ์ ๋ฌ
button.addEventListener('click', ()=>{
console.log('callback test')
})
</script>
์ฐ๋ฆฌ๊ฐ ํํ ์ฐ๋ addEventListener ๋ฟ๋ง ์๋๋ผ ๋น๋๊ธฐ ํจ์์ ๋ํ์ ์ธ setTimeout()ํจ์๋ ์ฝ๋ฐฑํจ์๋ฅผ ํ์๋ก ํ๋ค.
setTimeout(()=>{
console.log('callback test');
},100);
๋ค์์ 100ms์ดํ์ ์ฝ์ 'callback test' ๋ผ๋ ๋ฌธ์์ด์ ์ฐ์ ๊ฒ์ด๋ค.
๐Callback ํจ์ vs ๋น๋๊ธฐ ํจ์
์ฝ๋ฐฑ๊ณผ ๋น๋๊ธฐํจ์์ ๊ฐ์ ๋ง์ผ๊น? ๋ญ๊ฐ ํท๊ฐ๋ฆฌ๊ธฐ ์์ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก๋ ๋ค๋ฅด๋ค. ์ฐ๋ฆฌ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์ง ์ฝ๋ฐฑํจ์๊ฐ ๋น๋๊ธฐ๋ผ ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ธ์ ๋น๋๊ธฐ ํจ์๊ฐ ํ์ํ ๊ฒ์ธ๊ฐ?
๋น๋๊ธฐํจ์ ํ ํฌ๋์ ์ฌ์ฉ ์
- ์ฌ์ฉ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
- ๋คํธ์ํฌ ์๋ต์ฒ๋ฆฌ
- ํ์ผ ์ฝ๊ณ ์ฐ๋๋ฑ ํ์ผ ์์คํ ์ ์์
- ์๋์ ์ผ๋ก ์๊ฐ์ ์ง์ฐํ๋ ๊ธฐ๋ฅ (์๋)
๐์ฝ๋ฐฑํจ์์ ์ฌ์ฉ์ด์
์์๋ฅผ ํตํด ์ฝ๋ฐฑํจ์์ ํ์์ฑ์ ๋ํด ๊นจ๋ฌ์ ๋ด ์๋ค.
function getData() {
let data;
$.get('url/param', function (response) {
data= response;
});
return data;
}
console.log(getData()); // undefined
๋งจ ์๋์ ์ฝ์์์ ์ฐ๋ฆฌ๋ ajax๋ฅผ ํตํด ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
ํ์ง๋ง ์ค์ ์คํ ๊ฐ์ undefined์ ๋๋ค. ์ ๊ทธ๋ฌ๋ ๊ฑธ๊น์.....?๐๐๐๐๐
โผ๏ธ์ด์ ๋ ์์์ ๋น๋๊ธฐํ ํฌ์ ๋ฐฉ๋ฒ ์ค ๋คํธ์ํฌ ํต์ ์ ํจ์์ธ get์ ๋น๋๊ธฐ ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. get์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ์๊ฐ๋์ console.log() ํจ์๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด๊ณ ๋น์ฐํ ๋ฐ์ดํฐ๋ ์์ง ์๋ ์ํ์ ๋๋ค.
์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํด๋ด ์๋ค!
function getData(callback) {
$.get('url/param', function (response) {
callback(response); // ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ callbackํจ์์ ๋๊ฒจ์ค
});
}
getData(function (data) {
console.log(data);
});
์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ์๋๋ get๋น๋๊ธฐ ํจ์์์ ๋คํธ์ํฌ ํต์ ์ ํตํด response ๋ฐ์์จ ์ดํ์ callbackํจ์๋ฅผ ์คํํ๊ณ ์ด๋ฅผ ํตํด ์ฝ์์ ์ ๋๋ก ๋ ๋ฐ์ดํฐ ๊ฐ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
๐ก ์ฝ๋ฐฑ์ง์ฅ
์ฝ๋ฐฑํจ์๋ ์์ฒ๋ผ ๋น๋๊ธฐ์ ์ธ ๊ธฐ๋ฅ์ ํ๊ธฐ์ ๊ฐํธํ๊ณ ํ์ค์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ง๋ง ์๋น์ค๊ฐ ๋ณต์กํด ์ง์๋ก ๋น๋๊ธฐํจ์๊ฐ ๋น๋๊ธฐ๋ฅผ ํธ์ถํ๊ณ ํ๋ ์ค์ฒฉ์ ๋น ์ง๊ฒ ๋๊ณ ์ด๋ฅผ ์ฝ๋ฐฑ์ง์ฅ์ด๋ผ๊ณ ํฉ๋๋ค.
callback1(function(value1) {
callback2(value1, function(value2) {
callback3(value2, function(value3) {
callback4(value3, function(value4) {
callback5(value4, function(value5) {
// value5๋ฅผ ์ฌ์ฉํ๋ ์ฒ๋ฆฌ
});
});
});
});
});
๋น๋๊ธฐ ๋์์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ค์ฒฉ ํธ์ถ์ด ๋ง๋ค์ด๋ด๋ ํผ๋ผ๋ฏธ๋ ์์ธ ์ ์์ด ์ปค์ ธ๋ฒ๋ฆฌ๊ณ ์ ๋์์ด ๋๋ค ํ๋๋ผ๊ณ ์ฐจํ์ ์ ์ง๋ณด์๋ฅผ ํ๊ฑฐ๋ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ํ๋ ๊ฒฝ์ฐ ์์ฒญ๋ ๋์ ๋ก ์๋ฆฌ์ก๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Promise/ async, await ๋ผ๋ ํด๊ฒฐ๋ฐฉ์์ ECMAScript์์ ํ์คํํ์์ต๋๋ค.
'type & Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS] Nodejs ๊ธฐ์ด (0) | 2021.10.01 |
---|---|
[JS] JSON๋ฐ์ดํฐ CSVํ์ผ๋ก ์ ์ฅ (0) | 2021.09.26 |
[JS] expression & operator (0) | 2021.09.11 |
๋ณ์์ ์์ (0) | 2021.09.11 |
์๋ณ์์ Value (0) | 2021.09.01 |