[Swift] lazy ํ‚ค์›Œ๋“œ๋ž€?

ํ”ํžˆ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๋งŽ์ด ๋“ฃ๋Š” ์กฐ์–ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "์ข‹์€ iOS๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ์„ ๋งŽ์ด ์จ์•ผํ•ด~~" ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•  ๋•Œ๋‚˜ '๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”'์— ๋งŽ์€ ๊ณต์„ ๋“ค์ด๊ณ ๋Š” ํ•˜์ง€๋งŒ, ์‚ฌ์‹ค App๊ฐœ๋ฐœ์— ์žˆ์–ด์„œ๋„ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๋Š” ๊ฐ€ํžˆ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋Œ€์ฒด๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€ ๋•Œ '๋™์ ํ• ๋‹น' ์ด๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์‹œ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š”๋ฐ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ iOS ๊ฐœ๋ฐœ์—๋„ run-time์— ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋Š” lazy๋ผ๋Š” ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค! ์• ํ”Œ์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋ณด๋ฉด lazy์— ๋Œ€ํ•ด ์ด๋ ‡๊ฒŒ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (์ œ๊ฐ€ ์ดํ•ดํ•œ ๋Œ€๋กœ ์ž์ฒด๋ฒˆ์—ญ ํ•˜์˜€์Šต๋‹ˆ๋‹ค,,) lazy property๋Š” ์ด property๋ฅผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ๊นŒ์ง€๋Š”, ์ดˆ๊ธฐ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š” property์ž…๋‹ˆ๋‹ค. ์œ ์ €๋Š”, property์•ž..

๐ŸŽ/Swift 2023. 1. 30. 03:50
[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
[iOS] Xcode์˜ info.plist ์•Œ์•„๋ณด๊ธฐ

์• ํ”Œ ๊ณต์‹๋ฌธ์„œ์— ์žˆ๋Š” info.plist์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ•ด์„ํ•ด๋ณด๋ฉด, "์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด iOS์™€ macOS๋Š” ๊ฐ ์•ฑ์ด๋‚˜ ๋ฒˆ๋“ค์— ํŠน๋ณ„ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค" ๋ผ๊ณ (?) ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.... ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด, '๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค' ๋ผ๋Š” ๋ถ€๋ถ„์ธ๋ฐ์š”..! ์‰ฝ๊ฒŒ ๋งํ•ด์„œ, info.plist๋Š” ์•ฑ์ด๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„ค์ •๋“ค์„ ์ œ๊ณตํ•ด์ฃผ๋Š” XML ํŒŒ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค~ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ [key:value]์˜ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ์ œ๊ณต์ด ๋ฉ๋‹ˆ๋‹ค. Xcode๋Š” ์นœ์ ˆํ•˜๊ฒŒ๋„ ์ค‘์š”ํ•œ Key์˜ ๊ฒฝ์šฐ์— ์ž๋™์œผ๋กœ info.plist์— ์ถ”๊ฐ€๋ฅผ ํ•ด์ฃผ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ‚ค๋Š” CF์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๊ณ  Core Foundation keys ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ..

๐ŸŽ/iOS 2022. 11. 24. 03:46
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday