ํฐ์คํ ๋ฆฌ ๋ทฐ
์ด์ ํฌ์คํ ์์ Operator๋ ํ์ฌ Observable ์ธ์คํด์ค ๊ธฐ๋ฐ์ผ๋ก ํญ์ ์๋ก์ด Observable ์ธ์คํด์ค๋ฅผ ๋ฐํํ ์ ์๋ค๋ ์ฌ์ค์ ์์๋ค. ๋งค๋ฒ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค๋ ๋ง์ ๋ค์๊ณผ ๊ฐ์ด ๋ํธ ์ฒด์ด๋์ ๊ตฌ์ฑํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
observable
.map(event => event.target.value)
.debounceTime(delayTime)
.distinctUntilChanged()
.subscribe({
next: function(value) {
console.log(value);
}
})
ํ์ง๋ง ๋ํธ ์ฒด์ด๋์ ๊ตฌ์ฑํ๊ธฐ ์ํด์๋ Observable ๊ฐ์ฒด๊ฐ ๋ชจ๋ ์คํผ๋ ์ดํฐ๋ฅผ ์ง๋๊ณ ์์ด์ผ ํ๋ค.
- Observable.prototype์ ์ฌ์ฉํ๋ ๋ชจ๋ ์คํผ๋ ์ดํฐ๋ฅผ ์ถ๊ฐ: ๋ถํ์ํ ์คํผ๋ ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํด์ ํ์ผ ์ฌ์ด์ฆ ์ฆ๊ฐ
์ด๋ฅผ ๋์ ์ pipe ์คํผ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌ์ธ์ดํน(tree shaking)์ ์์ ๋กญ๊ฒ ํ ์ ์๋ค.
ํธ๋ฆฌ์ธ์ดํน์ ์ฌ์ฉํ์ง ์๋ ๋ชจ๋์ ๋ฒ๋ค๋งํ ๋ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ์ผ์ปซ๋๋ค.
๋ํ pipe ์คํผ๋ ์ดํฐ๋ ํจ์ ํํ๋ก๋ง ์คํผ๋ ์ดํฐ๊ฐ ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ Observable๊ณผ์ ๊ฒฐํฉ๋๋ฅผ ๊ฒฐ๋ถ์์ผ ์คํผ๋ ์ดํฐ๋ฅผ
์ฉ์ดํ๊ฒ ์์ฑํ ์ ์๋ค.
observable
.pipe(
map(event => event.target.value),
debounceTime(delayTime),
distinctUntilChanged(),
subscribe({
next: function(value) {
console.log(value);
}
}))
Pipe ํจ์
PipeLine in SoftWare
In software engineering, a pipeline consists of a chain of processing elements (processes, threads, coroutines, functions, etc.), arranged so that the output of each element is the input of the next; the name is by analogy to a physical pipeline.
์ํํธ์จ์ด ์์ง๋์ด๋ง์์์ ํ์ดํ ๋ผ์ธ์ ์ผ๋ จ์ ์ฒ๋ฆฌ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ ๊ฐ ์์์ ์ถ๋ ฅ์ด ๋ค์ ์์์ ์ ๋ ฅ์ด ๋๋๋ก ๋ฐฐ์ด๋๋ค.
Pure function(์์ ํจ์)
- ๋์ผํ ์ธ์๊ฐ ์ ๋ฌ๋๋ฉด ๊ทธ ํจ์์ ์คํ ๊ฒฐ๊ณผ๋ ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
- ์ด๋ ํ ์ํ๋ ๋ฐ์ดํฐ์ ์์กดํ์ง ์์
- side-effect๋ฅผ ๊ฐ์ง ์์
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
const addFive = a => a + 5;
const addFour = a => a + 4;
const ten = addFive(5);
const fourTeen = addFour(ten);
//const fourTeen = addFour(addFive(5))
ํ์ฌ๋ ํจ์์ ํธ์ถ์ด ๊ฐ๋จํ์ฌ ๋ณ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด๋ ๊ฒ ํจ์์ ๋ฐํ๊ฐ์ด ๋ค๋ฅธ ํจ์์ ์ธ์ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ๊ฒฝ์ฐ, ์ํฉ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฐ์
๋ฐํํ๋ฉด ๊ทธ ๋ค์ ํจ์์ ์ ์ฅ์์๋ ์ํฉ์ ๋ฐ๋ผ ๋ฐ๋ ์ ์๋ ๋ถ์์ ํ ๊ฐ์ด ์ธ์ ๊ฐ์ผ๋ก ๋ค์ด์ค๋ ์ ์ด๋ฏ๋ก, ๊ฒฐ๊ตญ ๋ฐํ๊ฐ ์ญ์ ๋ถ์์ ํ
์ ๋ฐ์ ์๋ค.
์ฆ, Pipe function์ ์ด๋ฌํ ์์ ํจ์๋ค์ ํฉ์ฑํ์ฌ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ฃผ๋ ์ญํ ์ ํ๋ค.
const pipe = (...functions) => (parameter) => functions.reduce((parameter, nextFn) => nextFn(arg), args),
Rest ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ ๋ฌ ๋ฐ์ ํจ์๋ค์ Array ํํ๋ก ์ ์ฌํ๊ณ ํด๋น Array์ reduce ๋ฉ์๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํ๋์ ๊ฐ์ ๋ฐํํ๋ค.
์ค์ฒฉ ํจ์์ธ ์ด์ ๋ Rest param์ ๋ฐ๋์ ๋งค๊ฐ ๋ณ์ ๋ง์ง๋ง ์์์ ์์นํด์ผ ํ๊ณ ์ด ๋๋ฌธ์ ํจ์๋ฅผ ๋๊ธฐ๋ ์์๊ฐ ๋ฐ๊ผ์ผ๋ฏ๋ก ๊ฐ์ ์ ๋ฌ
์์น ์ญ์ ๋ฐ๊ฟ์ผ ๋๋ค.
์ด๋ฅผ ๋์ ์ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ํ์ดํ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
pipe(func1, func2)(parameter)
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
getPropertyValue์ ๋ฐํ๊ฐ (0) | 2021.07.20 |
---|---|
setTimeout์ผ๋ก setInterval ๊ตฌํ (0) | 2021.07.18 |
RxJS debounceTime operator๋ฅผ ํตํด Event request ์ค์ด๊ธฐ (0) | 2021.07.17 |
textContent์ ๊ณต๋ฐฑ ๋ฌธ์ (0) | 2021.07.16 |
auto-complete_๋น๋๊ธฐ ์ฝ๋ฐฑ ํจ์, focusEvent, mouseEvent (0) | 2021.07.16 |