์ด์ ๊ณผ์ ๋ก ๊ธด ํ๋ฃจ๋ฅผ ๋ณด๋ด๋ค๋ณด๋ TIL์ ์ ์ง ๋ชปํ๋ค. ๋์์ ๋ฐ์ฑํด๋ผ...๐
๊ทธ๋ฆฌ๊ณ ์ด์ ์์ผ์ด์๋๋ฐ ์๋ฒฝ๊น์ง ์ฝ๋ฉ์ ํ๋๊ฒ ๋ฑํ ์ซ์ง๋ง์ ์์๋ค.
์ค๋ ์ค์ ์ ๊ณผ์ ๋ฅผ ๋๋ด์ ๊ทธ๋ฐ๊ฐ ๋ง์์ด ๋ฟ๋ฏํ๋ค.
๋ ์ด์ ๋น๋๋ฉด์ด์ง๋ง ๊ฒ๋์์ ์์ผ ์ถํ๋ฅผ ํด์ค ํ์๋ค์๊ฒ ๋๋ฌด ๊ณ ๋ง๋ค.
ํ ์ผ์ด ๋ง์ ๋ฐ์ ํ
๋ฐ ์์ผ๊น์ง ์ฑ๊ฒจ์ฃผ๋ค๋ ๋ง์์ด ๋ฐ๋ปํด์ก๋ค.
์ญ์๋ ๊ณ์ ์๋ ์ฌ๋, ์น๊ตฌ์ ์ค์์ฑ์ ํ๋ฒ ๋ ๋๊ผ๋ค.
๊ณผ์ ๋ก ์ธํด ๊ฐ์๋ฅผ ๋ง์ด ๋ฃ์ง๋ ๋ชปํ์ง๋ง, ์ด์ ๋น๋๊ธฐ/๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ํํธ๋ก ๋์ด๊ฐ๋ค.
1. ๋น๋๊ธฐ๋ฅผ ๊ฐ์ผ๋ก ๋ง๋๋ Promise
2. ํฉ์ฑ ๊ด์ ์์์ Promise์ ๋ชจ๋๋
3. Kleisli Composition
๋น๋๊ธฐ ๊ด๋ จ ์ค์ํ ๊ฐ๋ ๋ค์ ๋ฐฐ์ฐ๋ ๋งํผ ํ์คํ ์ตํ๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
ES6์ Promise๊ฐ ๋์ค๊ธฐ ์ ์๋ ์ฐ์์ ์ธ ๋น๋๊ธฐ ์์ ์ด ํ์ํ ๋ callback์ ์ฌ์ฉํ์๋ค.
// ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ callback
function add10(a, callback) {
setTimeout(() => callback(a + 10), 100);
}
// ์ฐ์์ ์ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ
add10(5, (res) => {
add10(res, (res) => {
add10(res, (res) => {
console.log(res); // 35
});
});
});
์ฐ์์ ์ธ ๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ์์ ๊ฐ์ด callback์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ค๋ฉด,
callback ์ง์ฅ์ ๋น ์ง ์ ์๋ค.
๋ํ, ๊ฐ๋
์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๊ณ ๋๋ฒ๊น
์ญ์ ๋งค์ฐ ์ด๋ ค์์ง๋ค.
// ES6์์ ๋ฑ์ฅํ Promise
function add20(a) {
return new Promise((resolve) =>
setTimeout(() => resolve(a + 20), 100))};
add20(5)
.then(add20)
.then(add20)
.then(console.log); // 65
promise ๊ฐ์ฒด์ ๋ฉ์๋์ธ then()์ ์ด์ฉํด ํธ์ถ์ด ๊ฐ๋ฅํ๋ฉฐ,
๋น๋๊ธฐ ์์
์ ์ถ์ํํ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ์ด๋ค ์ํ์ธ์ง ์ฝ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ์๋ฅผ ๋ฐ๋ฆฌ์ง์๊ณ ๋ค์ผ๋ ค๊ณ ๋
ธ๋ ฅํ๋๋ฐ ์ฝ์ง๊ฐ ์๋ค...
์ฃผ๋ง์ ๋ฐ๋ฆฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ , ์ํฐํด๋ ์ต์ 1๊ฐ๋ ์์ฑํด์ผ๊ฒ ๋ค...
๊ณ์ํด์ ์ ์๋ ์๊ฐ์ด ๋ฆ์ด์ง๋๋ฐ 5๊ฐ์์ ๋ฒํฐ๋ ค๋ฉด ๊ท์น์ ์ธ ์ต๊ด์ ๋ค์ด๊ธดํด์ผ๊ฒ ๋ค. ํญ์ ๋ฐ์ฑ๋ง ํ๋ TIL์ด๋ค ๐