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

728x90
๋ฐ˜์‘ํ˜•

ํ•ด๋‹น ๊ธ€์€, ๊ณฐํŠ€๊น€๋‹˜์˜ [RxSwift 4์‹œ๊ฐ„์— ๋๋‚ด๊ธฐ ์‹œ์ฆŒ2] ์˜์ƒ์„ ๋ณด๋ฉด์„œ ์Šค์Šค๋กœ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์•„๋ฌด๋ž˜๋„ ๊ณต๋ถ€ ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ž์˜์ ์ธ ํ•ด์„์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ญ

 

๋”ฐ๋ผ์„œ, RxSwift๋ฅผ ์ œ๋Œ€๋กœ ๊ณต๋ถ€ ํ•ด ๋ณด๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ ๊ณฐํŠ€๊น€๋‹˜์˜ ๊ฐ•์˜๋ฅผ ์ง์ ‘ ๋“ค์œผ์‹œ๋ฉฐ ๊ณต๋ถ€ ํ•ด ๋ณด์‹œ๋Š”๊ฒƒ์„ ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค!!!

 

 

 

 

 


RxSwift ๊ฐœ๋…์žก๊ธฐ (๋“ฑ์žฅ ๋ฐฐ๊ฒฝ + ๊ธฐ๋ณธ ๊ตฌ์กฐ)

 

example 1 ์†Œ์Šค์ฝ”๋“œ ๋ฐ ์‹คํ–‰ ํ™”๋ฉด

์ขŒ์ธก์˜ ์ฝ”๋“œ๋ฅผ ๋™์ž‘ ์‹œ์ผœ์„œ, ์šฐ์ธก๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๊ณ ์‹ถ๋‹ค. ์ด๋•Œ, ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ ํ•œ๋‹ค๋ฉด

1. ์ธ๋””์ผ€์ดํ„ฐ UI๋…ธ์ถœ

2. ์‹œ๊ฐ„์€ ๊ณ„์† ํ˜๋Ÿฌ๊ฐ

3. ๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๋ฉด text๋กœ ํ‘œํ˜„

์ด 3๊ฐ€์ง€์˜ ๋™์ž‘์ด ๋™์‹œ์— ์ด๋ค„์ ธ์•ผํ•˜์ง€๋งŒ,

 

์‹ค์ œ๋กœ๋Š” ์ธ๋””์ผ€์ดํ„ฐ๋„ ๋…ธ์ถœ์ด ์•ˆ๋˜๊ณ  ๋„คํŠธ์›Œํ‚น ๋™์ž‘์ด ์ผ์–ด๋‚˜๋Š” ๋™์•ˆ ์ƒ๋‹จ์˜ ํƒ€์ด๋จธ์˜ Label ๋ณ€๊ฒฝ๋„ ์ •์ง€๋œ๋‹ค.

 

๊ทธ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „์— ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ๋จผ์ € ์•Œ๊ณ  ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ, ๊ทธ ๋‚ด์šฉ์€

iOS๋Š” ๋”ฐ๋กœ thread๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด main thread๋กœ ๋™์ž‘ํ•˜๊ณ , main thread๋Š” ๋™๊ธฐ์ ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค

๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์—, main thread์—์„œ json์„ ๋ฐ›์•„์˜ค๋Š” ๋„คํŠธ์›Œํ‚น ์ž‘์—… ๋™์•ˆ, ๋‹ค๋ฅธ ๋ชจ๋“  UI์ž‘์—…๋“ค์€ ํ›„์ˆœ์œ„๋กœ ๋ฐ€๋ ค๋‚˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์ž‘์—…๋“ค์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” global thread๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ thread๋ฅผ ๋ถ„๋ฆฌ ํ•ด์ค˜์•ผํ•œ๋‹ค.

๋˜ํ•œ, UI๋™์ž‘์€ main thread์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— UI๋™์ž‘์€ ๋˜๋‹ค์‹œ main thread๋กœ ๋ถ„๊ธฐ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

 

๋ชจ๋“  ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ global thread๋กœ ์˜ฎ๊ฒจ๋†“๊ณ , ๊ทธ ์ค‘์—์„œ UI์ž‘์—…๋“ค์€ ๋‹ค์‹œ main์œผ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค

onLoad()ํ•จ์ˆ˜๋ฅผ ์œ„์™€๊ฐ™์ด ๋ณ€๊ฒฝ ํ•ด์ฃผ๋ฉด, ๋ชจ๋“  ๋™์ž‘์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๊ตฌํ˜„๋ถ€์— 1) ๋„คํŠธ์›Œํ‚น ์ž‘์—…๊ณผ 2) DispatchQueue์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ๋“ค์–ด๊ฐ€์žˆ์œผ๋ฉด

์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ ํ•ด๋ณด์ด๋‹ˆ ์•„์˜ˆ downloadJson(_ url: ) ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋กœ ๋นผ๋ฒ„๋ฆฌ์ž.

 

 

 

 

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” return์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋Œ€๋กœ ํ•จ์ˆ˜๋กœ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  return๊ฐ’์„ String? ํƒ€์ž…์œผ๋กœ ๊ฒฐ์ •ํ•œ ํ›„, return์„ ํ•ด ์ฃผ๋ฉด

์œ„์™€ ๊ฐ™์ด, '๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋ฆฌํ„ด๊ฐ’์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†๋‹ค' ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ๋™์ž‘์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅผ ๋•, escaping closure๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

์ด๋ ‡๊ฒŒ ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฃฐ๋•Œ๋Š”, escaping closure๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ escaping closure๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด

1) ๋น„๋™๊ธฐ์ ์ธ ๋™์ž‘์ด ์—ฌ๋Ÿฌ๊ฐœ ์—ฎ์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ค‘๊ฐ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ํž˜๋“ค๊ณ 

2) ์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ๋”๋Ÿฌ์›Œ์ง„๋‹ค.

 

 

 

์ง„์งœ ๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์–ด์ง€๋Ÿฝ๊ณ  ๋”๋Ÿฝ๋‹ค,,,,,,์šฐ์›ฉ

๊ทธ๋ž˜์„œ ์‚ฌ๋žŒ๋“ค์€ '์ด๋Ÿฐ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ƒฅ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ „๋‹ฌ ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?' ๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ•˜์˜€๊ณ 

๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐ ํ•ด ์ฃผ๊ธฐ ์œ„ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ RxSwift์ด๋‹ค.

 

 

 

์ฆ‰, RxSwift๋Š” [๋น„๋™๊ธฐ์ ์œผ๋กœ ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ (Observable<T>)]๋ฅผ [ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์‹œ์ ์— ์ฒ˜๋ฆฌ(.subscribe)]๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ด๋‹ค.

 

์ž ์ด๊ฒƒ์œผ๋กœ RxSwift ์„ค๋ช…์„ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ๋‹ค!!!!!

.

.

.

.

.

์‚ฌ์‹ค ๋งž๋Š” ๋ง์ด๊ธด ํ•˜์ง€๋งŒ,

๋ฐฅ์„ ํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ, ์Œ€๊ณผ ๋ฌผ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๋ฉด ๋ง›์žˆ๋Š” ๋ฐฅ์„ ์ง€์„ ์ˆ˜ ์žˆ์œผ๋žด~

์›๋ฆฌ์™€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ๋ง›์žˆ๋Š” ๋ฐฅ์ด ๋‚˜์˜ค์ง€!!!

 

์šฐ์„  ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ RxSwift์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ์•Œ์•„๋ณด์ž

 

1. [Observable] ํ˜•ํƒœ๋กœ ๊ฐ์‹ธ๋Š” ๋ฐ์ดํ„ฐ๋Š” '๋‚˜์ค‘์— ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ' ๋ผ๋Š” ๊ฒƒ!!

2. ๋˜ํ•œ, '๋‚˜์ค‘์— ์ƒ๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ' ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” [.subscribe]๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

3. ๊ทธ๋Ÿฌ๋ฉด, event๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, 3๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค. (.next / .completed / .error)

์ผ๋ฐ˜์  ๋ฆฌํ„ด๊ฐ’์€ String?์ด์ง€๋งŒ ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ ์ด๋ฏ€๋กœ Observable<String?>์„ ๋ฆฌํ„ด์‹œํ‚จ๋‹ค. ๋˜ํ•œ, ๋‚˜์ค‘์— ์ƒ๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด .subscribe๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

 

 

 

๋‹ค์‹œํ•œ๋ฒˆ ๊ฐ•์กฐํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ RxSwift๋ฅผ ๋ฐฐ์šด๋‹ค๋Š” ๊ฒƒ์€

1. ๋น„๋™๊ธฐ๋กœ ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Observable๋กœ ๊ฐ์‹ธ์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ๋ฒ•

2. Observable๋กœ ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด 2๊ฐ€์ง€๋ฅผ ๊ณต๋ถ€ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž„์„ ์œ ์˜ํ•˜์ž. (์ฆ‰, ์ด ๋‘๊ฐ€์ง€๋งŒ ์ž˜ ๋‹ค๋ฃจ๋ฉด RxSwift๋Š” ๋งˆ์Šคํ„ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง~)

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์œ„์˜ 2๊ฐ€์ง€๋ฅผ ์ ์šฉํ•˜์—ฌ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•ด๋ณด์ž


1. ๋น„๋™๊ธฐ๋กœ ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Observable๋กœ ๊ฐ์‹ธ์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ Observable ์ƒ์„ฑ

URLSession์„ ์‚ฌ์šฉํ•˜์—ฌ Observable์„ create ํ•ด๋ณด์•˜๋‹ค.

์œ„๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด emit.OnError๋กœ ํ•ด๋‹น error๋ฅผ ๋ณด๋‚ด์ฃผ๊ณ , data๊ฐ€ ์ œ๋Œ€๋กœ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ

String์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ onNext๋กœ ๋ฟŒ๋ ค์ค€๋‹ค.

์ดํ›„ ๋™์ž‘์ด ๋งˆ์น˜๋ฉด onCompleted๋กœ Observable์„ deinit ํ•ด์ค€๋‹ค.

 

๊น”๋”ํ•˜๊ฒŒ Observable์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ •๋ฆฌ ํ•ด ๋ณด์ž๋ฉด

1. Create

2. Subscribe

3. onNext

4. onCompleted / onError

5. Disposed

 

์œ„์˜ ์ˆœ์„œ๋ฅผ ๋ณด๋ฉด ์ง์ž‘ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Observable์„ Createํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ•ด๋‹น Observable์ด ๋ฐ”๋กœ ๋™์ž‘ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

Observable์ด subscribe๊ฐ€ ๋˜์–ด์•ผ๋งŒ, ๋น„๋กœ์†Œ ๋™์ž‘๋“ค์„ ์‹คํ–‰ํ•œ๋‹ค.

 

๋˜ํ•œ onNext๊ฐ€ ๋ชจ๋‘ ์ง„ํ–‰ ๋˜๊ณ , onCompleted / onError์— ์˜ํ•ด Disposed๋œ Observable์€ ์ ˆ๋Œ€ ์žฌ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

->  Observable์— ๋Œ€ํ•œ subscribe๋ฅผ ๋‹ค์‹œ ์ง„ํ–‰ํ•ด์•ผ๋งŒ, ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ

์ด๋ฏธ ์ฃฝ์€ ๋†ˆ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ง๊ณ , subscribe๋ฅผ ํ†ตํ•ด ์ƒˆ ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์–ด์ฃผ์ž~


2. Observable๋กœ ์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€~~์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ

์œ„ ๊ทธ๋ฆผ์€ Observable์„ ์ฒ˜๋ฆฌ(.subscribe)ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์ด๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ, subscribe๋ฅผ ํ†ตํ•ด์„œ event๋ฅผ ๋ฐ›๊ณ  .next / .error / .completed ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ง€ ๊ฒฐ์ •ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  subscribe์˜ ๋ฆฌํ„ดํƒ€์ž…์ธ Disposable์— ๋Œ€ํ•œ dispose()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.

 

 

 

 

 

+ ์ถ”๊ฐ€์ ์œผ๋กœ, closure๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ observable์— ๋Œ€ํ•œ ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ๋˜๋Š”๋ฐ, ์ด ์ˆœํ™˜ ์ฐธ์กฐ๋Š” event๋ผ๋Š” observable์ด ์ข…๋ฃŒ๊ฐ€ ๋˜์–ด์•ผ ์‚ฌ๋ผ์ง„๋‹ค. ์ด๋•Œ, ์œ„์—์„œ ์„ค๋ช… ํ–ˆ๋“ฏ์ด observable์˜ ์ข…๋ฃŒ ์กฐ๊ฑด์€ onCompleted / onError / Disposed ๋˜์—ˆ์„ ๋•Œ ์ด๋‹ค.

๊ทธ๋Ÿผ, ์ € ๋•Œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋˜์ง€ ์•Š๋Š๋ƒ ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ....๊ทธ๋ƒฅ ๋ง˜ ํŽธํ•˜๊ฒŒ event ์•ž์— [weak self] ๋ถ™์ด๋„๋ก ํ•˜์ž,,,,

์ด๋ ‡๊ฒŒ [weak self]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday