์ฝ๋ฐฑ(Callback)
๐ ์ฝ๋ฐฑ
์ฝ๋ฐฑ ํจ์๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ ํจ์์ด๋ค.
๋ค๋ฅธ ์ฝ๋(ํจ์ ๋๋ ๋ฉ์๋)์๊ฒ ์ธ์๋ก ๋๊ฒจ์ค์ผ๋ก์จ ๊ทธ ์ ์ด๊ถ๋ ํจ๊ป ์์ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํธ์คํธ ํ๊ฒฝ์ด ์ ๊ณตํ๋ ์ฌ๋ฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ๋์์ ์ํํ ์ ์๋ค.
๐ ์ฝ๋ฐฑ์ ์ด๋ค ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ ๊น?
function loadScript(src) {
// <script> ํ๊ทธ๋ฅผ ๋ง๋ค๊ณ ํ์ด์ง์ ํ๊ทธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
// ํ๊ทธ๊ฐ ํ์ด์ง์ ์ถ๊ฐ๋๋ฉด src์ ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ฉํ๊ณ ์คํํฉ๋๋ค.
let script = document.createElement("script");
script.src = src;
document.head.append(script);
}
loadScript("/my/script.js"); // script.js์ "function newFunction() {โฆ}"์ด ์์ต๋๋ค.
newFunction(); // ํจ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค!
new Function()
์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด์ฌ ์ ์๋ ์๊ฐ์ ์ถฉ๋ถํ ํ๋ณดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback(script);
document.head.append(script);
}
loadScript('/my/script.js', function() {
// ์ฝ๋ฐฑ ํจ์๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๋๋๋ฉด ์คํ๋ฉ๋๋ค.
newFunction(); // ์ด์ ํจ์ ํธ์ถ์ด ์ ๋๋ก ๋์ํฉ๋๋ค.
...
});
loadScript
์ ๋ ๋ฒ์งธ ์ธ์์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ๋๋ ํ ์คํ๋ ํจ์์ธ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ถ๊ฐํ๋ค.
๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ ํจ์๋ ์ํ๋ ๋์์ด ์๋ฃ๋์์ ๋ ์คํ๋๋ค.
์ด๊ฒ์ ์ฝ๋ฐฑ ๊ธฐ๋ฐ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋์ด์ผํ ํ์์ฑ์ ๊ฐ์ง ์ฝ๋์ ์ฝ๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
๐ ์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ
์ฝ๋ฐฑํจ์๋ฅผ ์ด์ฉํด์ ์๋ฌ๋ฅผ ํธ๋ค๋งํ ์ ์๋ค.
function loadScript(src, callback) {
let script = document.createElement("script");
script.src = src;
script.onload = () => callback(null, script);
script.onerror = () =>
callback(new Error(`${src}๋ฅผ ๋ถ๋ฌ์ค๋ ๋์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.`));
document.head.append(script);
}
loadScript("/my/script.js", function (error, script) {
if (error) {
// ์๋ฌ ์ฒ๋ฆฌ
} else {
// ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋จ
}
});
์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ์ ๊ด๋ก
callback
์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ์๋ฌ๋ฅผ ์ํด ๋จ๊ฒจ๋๋ค. ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ด ์ธ์๋ฅผ ์ด์ฉํดcallback(err)
์ด ํธ์ถ๋๋ค.- ๋ ๋ฒ์งธ ์ธ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์์ ๋๋ฅผ ์ํด ๋จ๊ฒจ๋๋ค. ์ํ๋ ๋์์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ์
callback(null, result1, result2)
๊ฐ ํธ์ถ๋๋ค.
์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ์ ์ฅ์
์ค๋ฅ ์ฐ์ ์ฝ๋ฐฑ์ ์ฌ์ฉํ๋ฉด, ๋จ์ผ ์ฝ๋ฐฑ ํจ์์์ ์๋ฌ ์ผ์ด์ค์ ์ฑ๊ณต ์ผ์ด์ค ๋ชจ๋๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
์ถ์ฒ
- ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ ๋ฆฌ์ผ
๐ฌ ์ต์ ๋๊ธ