๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

2022.01.08 ์˜ค๋Š˜์˜ ๋ฐฐ์›€

์˜ค๋Š˜ ํ•œ ์ผ.

  • Rx ์ •๋ฆฌํ•˜๊ธฐ

์˜ค๋Š˜ ์ƒˆ๋กœ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ.

  • ์˜ต์ €๋ฒ„๋ธ”์˜ ์ƒ์œ„ ํ”„๋กœํ† ์ฝœ์€ ObservableType์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–˜๊ฐ€ ์ฑ„ํƒํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์€ ObservableConvertibleType.
  • ObserverbaleConvertibleType์€ asObservable์— ๋Œ€ํ•œ ๋ช…์„ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ด๊ฑธ ObservableType์—์„œ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์Œ.
  • ๊ทผ๋ฐ ์‚ฌ์‹ค์ƒ Observable์˜ createํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๋ฉด์„œ ์ž๊ธฐ๋ฅผ subscribeํ•˜๋Š” ๋กœ์ง์„ ๋„ฃ์–ด์ค€๋‹ค.
  • ์˜ต์ €๋ฒ„๋ธ”์„ ์ƒ์†ํ•˜๋Š” ๋ชจ๋“  ํƒ€์ž…๋“ค์€ ๊ฐ์ž ์ž์‹ ์˜ subscribe๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.
  • just, single ์ฒ˜๋Ÿผ ์Šˆ๊ฐ€๋ฅผ ์•ˆ์“ฐ๊ณ  create๋กœ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€. ์ด๋Ÿด๋•Œ๋Š” AnonymousObservable์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • subscribe๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์‚ฌ์‹ค์ƒ Observable์ด ์ƒ์†ํ•˜๊ณ  ์žˆ๋Š” Producer ํด๋ž˜์Šค์˜ subscribe๋ฅผ ๋ถ€๋ฅด๋Š” ๊ฒƒ. ์—ฌ๊ธฐ์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๋Š” Observer ํƒ€์ž…์ด์–ด์•ผ ํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ onNext:{}, onError:{} ์ด๋Ÿฐ์‹์œผ๋กœ ํด๋กœ์ €๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋‹ค. ์™œ ์ด๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ƒ๋ฉด ObservableType+Extension์— ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ํด๋กœ์ €๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋‚ด๋ถ€์—์„œ AnonymousObserver๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • subscribe๋Š” Producer์— ๊ตฌํ˜„๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— Disposable์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์˜คํผ๋ ˆ์ดํ„ฐ๋“ค์€ Producer๋ฅผ ์ƒ์†ํ•˜๊ณ  ์žˆ๋‹ค.
  • Observable์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ์†์ ์œผ๋กœ ๋ฐฉ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
  • ์˜ต์ €๋ฒ„๋ธ”์ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ๋Š” ์„ธ ๊ฐ€์ง€ next, complete, error์ด๋‹ค. complete๊ณผ error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ต์ €๋ฒ„๋ธ” ์‹œํ€€์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ๋” ์ด์ƒ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • drive, bind, subscribe๋‹ค ๊ตฌ๋…์˜ ์—ญํ• ์„ ํ•˜๋Š” ์• ๋“ค์ธ๋ฐ ์ฝ”๋“œ๋ฅผ ๊นŒ๋ณด๋ฉด bind๋Š” onNext์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋งŒ ํ—ˆ์šฉํ•˜๊ณ  ์žˆ๊ณ  ๋‚˜๋จธ์ง€ ์ด๋ฒคํŠธ๋Š” ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. drive๋Š” bind๋ž‘ ๋˜‘๊ฐ™์€๋ฐ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ํด๋กœ์ €๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋ณด์žฅํ•˜๊ณ  subscribe๋Š” onNext, onError, onComplete์— ๋Œ€ํ•œ ํด๋กœ์ €๋ฅผ ๋‹ค ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ซ ์˜ต์ €๋ฒ„๋ธ”์€ ๊ตฌ๋…์ž๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ณง๋ฐ”๋กœ ๋ฐฉ์ถœํ•˜๊ณ , ์ฝœ๋“œ ์˜ต์ €๋ฒ„๋ธ”์€ subscribe๊ฐ€ ์‹œ์ž‘๋˜์–ด์•ผ ๋ฐฉ์ถœ์ด ์‹œ์ž‘๋œ๋‹ค.
  • ์˜ต์ €๋ฒ„๋ธ”๊ณผ ์„œ๋ธŒ์ ํŠธ๋Š” ์„œ๋ธŒ์ ํŠธ๊ฐ€ ์˜ต์ €๋ฒ„์˜ ์—ญํ• ๋„ ๊ฒธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์žˆ๋‹ค. ์„œ๋ธŒ์ ํŠธ์˜ next๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ’์„ ์‹œํ€€์Šค์— ๊ณ„์† ์ถ”๊ฐ€ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ธŒ์ ํŠธ๋Š” ํ•ซ ์˜ต์ €๋ฒ„๋ธ”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ฐ’์„ ๊ณ„์† ์„œ๋ธŒ์ ํŠธ์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๊ตฌ๋…์ž๋Š” ์„œ๋ธŒ์ ํŠธ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ์„œ ์ด์ „ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๋ฐ›๊ฑฐ๋‚˜(Replay), ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฐฉ์ถœ๋œ ๊ฐ’๋งŒ ๋ฐ›๊ฑฐ๋‚˜(Behavior), ์ตœ๊ทผ๊นŒ์ง€ ๋ฐฉ์ถœ๋œ ๊ฐ’์€ ๋ฌด์‹œํ•˜๊ณ  ์•ž์œผ๋กœ ๋ฐฉ์ถœ๋˜๋Š” ๊ฐ’๋งŒ ๋ฐ›๋„๋ก(Behavior) ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ observer ํƒ€์ž…์„ ์ง์ ‘ ๋‹ค๋ฃฐ ์ผ์ด ์—†๋Š” ์ด์œ ๋Š” subscribe๋ฉ”์„œ๋“œ์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ Observer๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์˜ค๋Š˜ ๋Š๋‚€ ๊ฒƒ.

  • Rx๋ฅผ ๋„ˆ๋ฌด ์ƒ๊ฐ์—†์ด ์“ฐ๊ณ  ์žˆ์—ˆ๋‹ค. 
  • single ์ฒ˜๋Ÿผ ๋„คํŠธ์›Œํ‚น์— ์ ํ•ฉํ•œ ์˜คํผ๋ ˆ์ดํ„ฐ๋„ ์žˆ์—ˆ๋Š”๋ฐ ํ”Œ์ ํ•  ๋•Œ ๋„ˆ๋ฌด ๋ฌด์ง€์„ฑ์œผ๋กœ ์˜ต์ €๋ฒ„๋ธ”์„ ๋งŒ๋“  ๊ฒƒ ๊ฐ™๋‹ค. ์ด๊ฒƒ๋„ ๋‚˜์ค‘์— ์ˆ˜์ •ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋””์Šคํฌ ์บ์‹œ๋ฅผ ๋น„์›Œ์ฃผ๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋งŽ๋‹ค. ์ผ๋‹จ ์ž๋™์œผ๋กœ ๋””์Šคํฌ๋ฅผ ๋น„์›Œ์ฃผ๋ ค๋ฉด ์•„๋งˆ๋„ LRU๋ฅผ ์‚ฌ์šฉํ•  ํ…Œ๋‹ˆ๊นŒ ๋””์Šคํฌ ์บ์‹œ ํžˆํŠธ์‹œ๊ฐ„์„ ๊ธฐ๋ก์„ ํ•ด๋‘ฌ์•ผํ•œ๋‹ค. ๊ทผ๋ฐ ์ง€๊ธˆ์€ FIleManager์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํŒŒ์ผ์ด๋ฆ„์— ์‹œ๊ฐ„์„ ๋ถ™์—ฌ์„œ ์ •๊ทœ์‹์œผ๋กœ ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ณ  ์ฝ๊ณ , ํŒจํ„ด๋งค์นญ์œผ๋กœ ์ง€์šธ ํŒŒ์ผ์„ ์„ ํƒํ•ด์•ผํ•˜๋Š”๋ฐ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค. ์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋กœ์ปฌ๋””๋น„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์‹œ๊ฐ„๋„ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ฝ”์–ด๋ฐ์ดํ„ฐ๋ฅผ ๋„์ž…ํ•˜๊ธฐ์—๋Š” ์—ฌ๋ ฅ์ด ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋‹จ ๋งˆ์ดํŽ˜์ด์ง€์— ์บ์‹œ ์ €์žฅ์šฉ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์šฐ๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์„œ ํƒญํ–ˆ์„ ๋•Œ ์บ์‹ฑ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ตœ๊ทผ์— ์•ฝ๊ฐ„ ํ•œ๊ณ„์น˜๊นŒ์ง€ ๋‹ค๋‹ค๋ฅธ ๋Š๋‚Œ์ด ๋“ ๋‹ค. ๋‹ค์Œ์ฃผ๊ฐ€ ๋๋‚˜๋ฉด ๋ฉฐ์น ๋งŒ์ด๋ผ๋„ ์ œ๋Œ€๋กœ ์‰ฌ๋Š” ๊ธฐ๊ฐ„์„ ๊ฐ€์ ธ์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด์ผ์˜ ๊ณ„ํš.

  • ๋ฉด์ ‘ ์ค€๋น„ ๋งˆ๋ฌด๋ฆฌ
  • ๊ณผ์ œ ์ง„ํ–‰

์˜ค๋Š˜์˜ ๊ฐ์‚ฌ.

  • .