[RxSwift] #7) Driver๋ž€ ๋ฌด์—‡์ธ๊ฐ€?? [Driver์™€ Relay]

๋ณธ ํฌ์ŠคํŒ…์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํ•œ ๋‚ด์šฉ์€, ๊ฐ•์˜ ์˜์ƒ์„ ์ง์ ‘ ์‹œ์ฒญํ•˜์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ Driver๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ธ€ ๋งˆ๋ฌด๋ฆฌ์—, 5์ค„์š”์•ฝ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ ํ•œ ๋‚ด์šฉ๋„ ์žˆ์œผ๋‹ˆ ์‹œ๊ฐ„์ด ์—†์œผ์‹  ๋ถ„๋“ค์€ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ RxCocoa๋ฅผ ์„ค๋ช… ํ•  ๋•Œ 'UIKit์— Rx์š”์†Œ๋“ค์„ ์ ์šฉ์‹œํ‚จ Extentsion'์ด๋ผ๊ณ  ์„ค๋ช… ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ RxCocoa๋ฅผ ํ™œ์šฉํ•˜์—ฌ UIKit์— ์ง์ ‘์ ์œผ๋กœ Observable์„ ๋ฐ”์ธ๋”ฉ ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. viewModel.itemsCount .map{"\($0)"} .observeOn(MainScheduler.instanc..

๐ŸŽ/RxSwift 2023. 2. 6. 03:32
[RxSwift] #6) RxSwift + MVVMํŒจํ„ด [RxCocoa๋ฅผ ํ™œ์šฉํ•œ UITableView ๊ตฌ์„ฑ]

๋ณธ ํฌ์ŠคํŒ…์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํ•œ ๋‚ด์šฉ์€, ๊ฐ•์˜ ์˜์ƒ์„ ์ง์ ‘ ์‹œ์ฒญํ•˜์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ด์ „์— ํฌ์ŠคํŒ…ํ•œ RxSwift + MVVMํŒจํ„ด [Subject๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž]์— ์ด์–ด์ง€๋Š” ํฌ์ŠคํŒ… ์ž…๋‹ˆ๋‹ค. ์ €๋ฒˆ ํฌ์ŠคํŒ… ๋ง๋ฏธ์— ๋‚˜์™”๋˜ RxCocoa์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. RxCocoa๋ฅผ ์š”์•ฝํ•˜์ž๋ฉด, [RxSwift์˜ ์š”์†Œ๋“ค์„ UIKit์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก extension ์‹œ์ผœ์„œ ์ ‘๋ชฉ์‹œํ‚จ ๊ฒƒ] ์ด๋ผ๊ณ  ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๋กœ๋งŒ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์œผ๋‹ˆ, ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. override func viewDidLoad() { super.viewDidLoad() viewModel.itemsCount .subscrib..

๐ŸŽ/RxSwift 2023. 2. 1. 03:46
[RxSwift] #5) RxSwift + MVVMํŒจํ„ด [Subject๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž]

๋ณธ ํฌ์ŠคํŒ…์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํ•œ ๋‚ด์šฉ์€, ๊ฐ•์˜ ์˜์ƒ์„ ์ง์ ‘ ์‹œ์ฒญํ•˜์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ด์ „์— ํฌ์ŠคํŒ…ํ•œ [RxSwift] #3) RxSwift๋ฅผ ํ™œ์šฉํ•œ MVVMํŒจํ„ด [1] ์— ์ด์–ด์ง€๋Š” ํฌ์ŠคํŒ… ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฒˆ ๊ธ€๋ถ€ํ„ฐ ์ฝ”๋“œ๋‚ด์šฉ์„ ์บก์ณ ํ˜•์‹์ด ์•„๋‹Œ, ์ฝ”๋“œ๋ธ”๋Ÿญ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค! ์ด์ „ํฌ์ŠคํŒ…์—์„œ Observable๋กœ ์ƒ์„ฑํ•œ ๋ณ€์ˆ˜๋ฅผ, ๊ตฌ๋… ํ•œ ์ดํ›„์—๋„ ์ง€์†์ ์ธ ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ๊ด€์ฐฐํ•ด์•ผํ•˜๋Š” ํ•„์š”๊ฐ€ ์ƒ๊ฒจ ์ด๋ฅผ์œ„ํ•ด Observable์„ Subject๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค. (Subject์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!) class MenuListViewModel{ var menus : [Menu] = [ Menu..

๐ŸŽ/RxSwift 2023. 1. 30. 07:28
[RxSwift] #4) Subject๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ณธ ํฌ์ŠคํŒ…์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํ•œ ๋‚ด์šฉ์€, ๊ฐ•์˜ ์˜์ƒ์„ ์ง์ ‘ ์‹œ์ฒญํ•˜์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! Subject ๋ž€? ์ด์ „ ํฌ์ŠคํŒ… ๋ง๋ฏธ์—, Subeject๋ผ๋Š” ๊ฒƒ์„ ์ž ๊น ์†Œ๊ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ดํ›„ ํ”„๋กœ์ ํŠธ์—์„œ๋„ Subject๋ฅผ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ์ด ๋งŽ์ด ๋‚˜์™€์„œ, ์ด Subject์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Subject๋ฅผ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด, Observable์˜ ํ๋ฆ„์„ ๋ฒ—์–ด๋‚œ ์™ธ๋ถ€์—์„œ๋„, ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ง‘์–ด๋„ฃ์–ด์ฃผ๋Š” ๋…€์„์ž…๋‹ˆ๋‹ค. ReactiveX ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ณด๋ฉด Subject์˜ ์ข…๋ฅ˜์—๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 1) AsyncSubject 2) BehaviorSubject 3) PublishSubject 4) ReplaySubject ๊ฐ..

๐ŸŽ/RxSwift 2023. 1. 29. 19:18
[RxSwift] #3) RxSwift + MVVMํŒจํ„ด [๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ]

๋ณธ ํฌ์ŠคํŒ…์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋”์šฑ ์ž์„ธํ•œ ๋‚ด์šฉ์€, ๊ฐ•์˜ ์˜์ƒ์„ ์ง์ ‘ ์‹œ์ฒญํ•˜์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค! 1. ํ”„๋กœ์ ํŠธ๋ฅผ MVVM ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, RxSwfit์˜ ์‹ค์ œ ์ ์šฉ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” MVVMํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์ง„ํ–‰ํ•  ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ํด๋”๊ตฌ์กฐ์™€, View ํ™”๋ฉด์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1) Model : APIService๋กœ ๋ฐ›์•„์˜ฌ rawData ๊ตฌ์กฐ ํŒŒ์ผ 2) APIService : Menu์˜ Model๋กœ fetching ํ•ด์˜ค๋Š” API๊ฐ€ URLSession์œผ๋กœ ์ž‘์„ฑ ๋˜์–ด์žˆ์Œ 3) MenuViewController : tabelView๋กœ ๊ตฌ์„ฑ๋œ ํ™ˆ ํ™”๋ฉด ViewContr..

๐ŸŽ/RxSwift 2023. 1. 29. 06:12
[RxSwift] #2) Operator๋ž€?? + ReactiveX ๋ฌธ์„œ๋ณด๋Š” ๋ฒ•

ํ•ด๋‹น ํฌ์ŠคํŠธ๋Š” ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜์˜์ƒ์„ ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์˜์ƒ์„ ์ง์ ‘ ๋ณด์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค..! 1. Operator๋ž€? RxSwift์˜ ์šฉ๋„๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ฉด, ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด Observable์ด๋ผ๋Š” ํด๋ž˜์Šค๋กœ ๊ฐ์‹ธ์„œ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•จ ์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์‚ฌ์ง„ 2์žฅ์€ ์ด๋Ÿฌํ•œ RxSwift๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์ฝ”๋“œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ onError() / onNext() / onCompleted() ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ~ .next() / .error() / .completed() ๊นŒ์ง€,,,, ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ์กฐ์ฐจ๋„ ๋„ˆ๋ฌด ์จ์•ผํ•˜๋Š” ๊ฒƒ๋“ค์ด ๋งŽ๊ณ  ๋ณต์žกํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, Rx์—๋Š” ์ด๋Ÿฐ ๊ท€์ฐฎ์€ ์ฝ”๋“œ๋“ค์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ค„์—ฌ์ฃผ๋Š” ๋ฌธ๋ฒ•๋“ค์ด ์กด์žฌ..

๐ŸŽ/RxSwift 2023. 1. 28. 21:28
[RxSwift] #1) RxSwift ๊ฐœ๋…์žก๊ธฐ (๋“ฑ์žฅ ๋ฐฐ๊ฒฝ + ๊ธฐ๋ณธ ๊ตฌ์กฐ)

ํ•ด๋‹น ๊ธ€์€, ๊ณฐํŠ€๊น€๋‹˜์˜ [RxSwift 4์‹œ๊ฐ„์— ๋๋‚ด๊ธฐ ์‹œ์ฆŒ2] ์˜์ƒ์„ ๋ณด๋ฉด์„œ ์Šค์Šค๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ๊ณต๋ถ€ ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ž์˜์ ์ธ ํ•ด์„์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ญ ๋”ฐ๋ผ์„œ, RxSwift๋ฅผ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ ํ•ด ๋ณด๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์ง์ ‘ ๋“ค์œผ์‹œ๋ฉฐ ๊ณต๋ถ€ ํ•ด ๋ณด์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค!!! RxSwift ๊ฐœ๋…์žก๊ธฐ (๋“ฑ์žฅ ๋ฐฐ๊ฒฝ + ๊ธฐ๋ณธ ๊ตฌ์กฐ) ์ขŒ์ธก์˜ ์ฝ”๋“œ๋ฅผ ๋™์ž‘ ์‹œ์ผœ์„œ, ์šฐ์ธก๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค. ์ด๋•Œ, ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ ํ•œ๋‹ค๋ฉด 1. ์ธ๋””์ผ€์ดํ„ฐ UI๋…ธ์ถœ 2. ์‹œ๊ฐ„์€ ๊ณ„์† ํ˜๋Ÿฌ๊ฐ 3. ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๋ฉด text๋กœ ํ‘œํ˜„ ์ด 3๊ฐ€์ง€์˜ ๋™์ž‘์ด ๋™์‹œ์— ์ด๋ค„์ ธ์•ผํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์ธ๋””์ผ€์ดํ„ฐ๋„ ๋…ธ์ถœ์ด ์•ˆ๋˜๊ณ  ๋„คํŠธ์›Œํ‚น ๋™์ž‘์ด ์ผ์–ด๋‚˜๋Š” ..

๐ŸŽ/RxSwift 2023. 1. 26. 08:26
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday