ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

https://choi95.tistory.com/89

 

RxJS debounceTime operator๋ฅผ ํ†ตํ•ด Event request ์ค„์ด๊ธฐ

๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋™์‹œ์— ์—”ํ„ฐํ‚ค, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ํ•„์š” ์—†์ด ๊ฒฐ๊ณผ๊ฐ’์„ ์ฆ‰์‹œ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜์˜€๋‹ค. const dispatchEvent = debounce((targetText) => { this.callback(targetText); }, thi..

choi95.tistory.com


์ด์ „ ํฌ์ŠคํŒ…์—์„œ 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)
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ