๐ฅ ํค์๋
- MVC
- MVVM
- ์ฑ๊ธํคํจํด
- Delegate ํจํด
- RxSwift
๐ฅ ์์ ์ง๋ฌธ์ง
- ์ฑ๊ธํค ํจํด์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- ์ฑ๊ธํค ํจํด(Singleton Pattern)์ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๋๋ก ๋ณด์ฅํ๋ ๋์์ธ ํจํด์ ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ญ์ ์ผ๋ก ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. Swift์์๋ static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ํตํด ์ฑ๊ธํค ํจํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- ๋๋ฆฌ๊ฒ์ดํธ ํจํด(Delegate Pattern)์ ํ ๊ฐ์ฒด๊ฐ ํน์ ์์ ์ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ํ๋ ๋์์ธ ํจํด์ ๋๋ค. ํ๋กํ ์ฝ์ ํตํด ๊ตฌํ๋๋ฉฐ, ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฐ์ฒด๊ฐ ์์๋ ์์ ์ ์ํํฉ๋๋ค. ์ด ํจํด์ UIKit์ ์ฌ๋ฌ ํด๋์ค์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์ ๋ฌ ๋ฑ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ๋์ธ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
- iOS์์ ์ ๊ณตํ๋ ์ฑ๊ธํค ํจํด์ ์ ์ฉํ ๊ฒ๋ค์ ์ด๋ค๊ฒ ์๋์ง ์๋ฅผ ๋ค์ด์ฃผ์ธ์.
- iOS์์ ์ฑ๊ธํค ํจํด์ด ์ ์ฉ๋ ์์๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค:
- UserDefaults.standard: ์ฌ์ฉ์ ์ค์ ์ด๋ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ต๋๋ค.
- UIApplication.shared: ์ฑ์ ๋ผ์ดํ์ฌ์ดํด๊ณผ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- FileManager.default: ํ์ผ ์์คํ ์ ์ ๊ทผํ์ฌ ํ์ผ์ ๊ด๋ฆฌํฉ๋๋ค.
- URLSession.shared: ๊ธฐ๋ณธ์ ์ธ ๋คํธ์ํน ์์ ์ ์ํํฉ๋๋ค.
- NotificationCenter.default: ์ฑ ๋ด์์ ์ด๋ฒคํธ๋ฅผ ์ ํํ๊ณ ์์ ํฉ๋๋ค.
- iOS์์ ์ฑ๊ธํค ํจํด์ด ์ ์ฉ๋ ์์๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค:
- MVC์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- MVC(Model-View-Controller)๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ธ ๊ฐ์ง ์ญํ ๋ก ๋ถ๋ฆฌํ๋ ๋์์ธ ํจํด์
๋๋ค.
- Model: ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
- View: ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ด๋นํฉ๋๋ค.
- Controller: Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. MVC์์๋ Controller๊ฐ View์ Model์ ์ค๊ฐํ์ฌ ์๋ก ํต์ ํฉ๋๋ค.
- MVC ํจํด์ ์ฝ๋์ ๋ชจ๋ํ๋ฅผ ๋์ด๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- MVC(Model-View-Controller)๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ธ ๊ฐ์ง ์ญํ ๋ก ๋ถ๋ฆฌํ๋ ๋์์ธ ํจํด์
๋๋ค.
- MVVM์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- MVVM(Model-View-ViewModel)์ UI ๊ฐ๋ฐ์ ๋ ๋ชจ๋ํํ๊ณ ํ
์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋์์ธ ํจํด์
๋๋ค:
- Model: ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค.
- View: ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ด๋นํ๊ณ , ViewModel์ ๋ฐ์ธ๋ฉ ํ์ฌ ๋ฐ์ดํฐ์ ์ํธ์์ฉํฉ๋๋ค.
- ViewModel: View๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. Model๊ณผ View ์ฌ์ด์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ด๋นํฉ๋๋ค.
- MVVM ํจํด์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด View์ ViewModel ์ฌ์ด์ ์๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ, ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ๋์ ๋๋ค.
- MVVM(Model-View-ViewModel)์ UI ๊ฐ๋ฐ์ ๋ ๋ชจ๋ํํ๊ณ ํ
์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋์์ธ ํจํด์
๋๋ค:
- MVVM์์ ๋ฐ์ธ๋ฉ์ ์ํด์ ์ด๋ค ๋ฐฉ๋ฒ์ ์จ๋ณด์
จ๋์?
- RxSwift๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ธ๋ฉ์ ๊ตฌํํด๋ณด์์ต๋๋ค. RxSwift๋ฅผ ํตํด Observables์ Binding์ ํ์ฉํ์ฌ ViewModel๊ณผ View ์ฌ์ด์ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ๊ฒฐํ๊ณ ์ ์ธ์ ์ผ๋ก ๊ตฌํํ ์ ์์์ต๋๋ค.
- MVC์ MVVM์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Controller์ ์ญํ : MVC์์๋ Controller๊ฐ View์ Model์ ๋ชจ๋ ๊ด๋ฆฌํ์ง๋ง, MVVM์์๋ ViewModel์ด View์ Model์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ: MVVM์์๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ViewModel๊ณผ View ์ฌ์ด์ ํต์ ์ ์๋ํํ๊ณ ๋จ๋ฐฉํฅ ํน์ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, MVC์์๋ View์ Controller ๊ฐ์ ์ํธ์์ฉ์ ์ง์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ํ ์คํธ ์ฉ์ด์ฑ: MVVM์ View์ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ด ์์ด ํ ์คํธํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- RxSwift์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- RxSwift๋ Microsoft์์ ๋ง๋ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, Swift์์ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ณ ์ด๋ฒคํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. RxSwift๋ Observable์ ํตํด ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , ์ด ๋ณํ๋ฅผ Observer์๊ฒ ์ ๋ฌํ์ฌ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ํ DisposeBag์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
- ์ต์ ๋ฒ ํจํด์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- ์ต์ ๋ฒ ํจํด(Observer Pattern)์ ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ๊ด์ฐฐํ๊ณ , ๋ณํ๊ฐ ์์ ๋ ๊ด๋ จ๋ ๊ฐ์ฒด๋ค์๊ฒ ์๋์ผ๋ก ์๋ฆผ์ด ์ ๋ฌ๋๋ ๋์์ธ ํจํด์ ๋๋ค. ์ฃผ์ฒด(Subject)์ ๊ด์ฐฐ์(Observer)๋ก ๊ตฌ์ฑ๋๋ฉฐ, Subject์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด Observer๋ค์๊ฒ ์๋ฆผ์ ๋ณด๋ด ๋ณํ์ ์ ์ ํ ์์ ์ ์ํํ๊ฒ ํฉ๋๋ค.
- Observable๊ณผ Observer์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Observable: ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , ํด๋น ๋ณํ๋ฅผ Observer์๊ฒ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒคํธ ์คํธ๋ฆผ์ ์์ฑํ๋ฉฐ, Observer๊ฐ ๊ตฌ๋ (subscribe)ํ ์ ์์ต๋๋ค.
- Observer: Observable์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ์ํ๋ ์ญํ ์ ํฉ๋๋ค. Observable๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ฉฐ, ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก onNext, onError, onCompleted ๋ฉ์๋๋ฅผ ๊ตฌํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฑฐ๋ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- Observable๊ณผ Observer๋ ํจ๊ป ์ฌ์ฉ๋์ด ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ , ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- Subject์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Subject๋ RxSwift์์ Observable์ด์ Observer์ ์ญํ ์ ๋์์ ์ํํ๋ ํน๋ณํ ๊ฐ์ฒด์ ๋๋ค. Subject๋ ์ธ๋ถ์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ์๊ณ , ๊ทธ ์ด๋ฒคํธ๋ฅผ ์์ ์ ๊ตฌ๋ ํ๋ Observer๋ค์๊ฒ ์ ๋ฌํฉ๋๋ค. ์ฃผ๋ก ์ธ๋ถ ์ด๋ฒคํธ๋ฅผ Observable๋ก ๋ณํํ๊ฑฐ๋, ์ฌ๋ฌ Observer๊ฐ ๋์ผํ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๊ณต์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ํ์ ์ธ Subject๋ก๋ PublishSubject, BehaviorSubject, ReplaySubject, AsyncSubject ๋ฑ์ด ์์ต๋๋ค.
- PublishSubject: ๊ตฌ๋ ์ดํ์ ๋ฐํ๋๋ ์๋ก์ด ์์ดํ ๋ค๋ง Observer์๊ฒ ์ ๋ฌํฉ๋๋ค.
- BehaviorSubject: ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐํ๋ ์์ดํ ์ด๋ ๊ธฐ๋ณธ๊ฐ์ ์๋ก์ด ๊ตฌ๋ ์์๊ฒ ์ ๋ฌํฉ๋๋ค.
- ReplaySubject: ์ง์ ๋ ๋ฒํผ ํฌ๊ธฐ ๋งํผ์ ์ต๊ทผ ์์ดํ ๋ค์ ์๋ก์ด ๊ตฌ๋ ์์๊ฒ ์ ๋ฌํฉ๋๋ค.
- AsyncSubject: ์์ค Observable์ ์๋ฃ ์์ ์ ๊ฐ์ฅ ์ต๊ทผ ์์ดํ ์ ๋ฐํํ๊ณ , ๊ทธ ์ดํ์ ์๋ฃ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํฉ๋๋ค.
- Cold Observable๊ณผ Hot Observable์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
- Cold Observable:
- ์ ์: ๊ตฌ๋ ์๊ฐ ์๊ธธ ๋๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์์ฑํฉ๋๋ค.
- ํน์ง: ๊ฐ ๊ตฌ๋ ์๋ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฐ์ผ๋ฉฐ, Observable์ด ๊ตฌ๋ ๋ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค.
- ์์: ๋คํธ์ํฌ ์์ฒญ, ํ์ผ ์ฝ๊ธฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๋ฑ.
- Hot Observable:
- ์ ์: ๊ตฌ๋ ์ฌ๋ถ์ ์๊ด์์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ Observable์ ๋๋ค.
- ํน์ง: ์ฌ๋ฌ ๊ตฌ๋ ์๋ค์ด ๋์ผํ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๊ณต์ ํ๋ฉฐ, ๊ตฌ๋ ์์ ์ ๋ฐ๋ผ ์์ ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
- ์์: ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ, ํค๋ณด๋ ์ ๋ ฅ, System Notification ๋ฑ.
- ๊ตฌ๋ถ ๋ฐฉ๋ฒ:
- Cold Observable์ ๋ฐ์ดํฐ๋ฅผ "์์ฐ"ํ๊ณ , Hot Observable์ ์ด๋ฏธ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ์ด๋ฒคํธ๋ฅผ "๊ณต์ "ํฉ๋๋ค.
- Subject๋ฅผ ์ฌ์ฉํ์ฌ Cold Observable์ Hot Observable๋ก ๋ณํํ ์ ์์ต๋๋ค.
- Cold Observable:
๋ฐ์ํ
'TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2024. 09. 26 (0) | 2024.09.26 |
---|---|
[TIL] 2024. 09. 25 (0) | 2024.09.25 |
[TIL] 2024. 09. 23 (0) | 2024.09.24 |
[TIL] 2024. 09. 20 (0) | 2024.09.24 |
[TIL] 2024. 09. 19 (0) | 2024.09.24 |