์ค๋์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ MVVM ํจํด์ ๋ํด ๋ค์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ตฌ ํ๋ค.
๊ธฐ์กด MVC ํจํด์ด View์ Controller ๊ฐ ๋ถ๋ฆฌ๊ฐ ๋์ง ์์ ๋น๋ํด์ง๋ค๋ ๋ฌธ์ ์ ์ด ์์๋ค.
MVVM ํจํด์ view, view model, model ์ด๋ ๊ฒ 3๊ฐ์ง ๋ถ๋ฆฌ๋ฅผ ํตํด ๊ทธ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ค
์์ผ๋ก๋ model์ ๋ณํ๋ฅผ view model์ด ์ฑ ์์ง๊ณ view๋ model๊ฐ ์ง์ ์ ์ธ ์ฐ๊ฒฐ ์์ด view model์ ํตํด view ์์ ์ ์ ๋ฐ์ดํธ ํ๋ค.
์ฌ๊ธฐ๊น์ง๋ ๋ด๊ฐ ์๊ณ ์๋ MVVM ํจํด์ด์๊ตฌ MVVM ํจํด์ Repository ?? ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐ๊ฒฌํด์ ๊ถ๊ธํด์ ์ ๋ฆฌ ํด๋ณด๋ ค๊ณ ๋ง์ ๋จน๊ฒ ๋์๋ค.
์๋ ๊นํ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํด๋ณด๋ ค๊ตฌ ํ๋ค.
https://github.com/kudoleh/iOS-Clean-Architecture-MVVM
์ฐ์ ํด๋ฆฐ ์ํคํ ์ณ๋ ? (ํด๋ฆฐ ์ฝ๋ .. ๐)
Robert C Martin(Uncle Bob)๋์ด ์ ์ํ์ จ๋๋ฐ, ์๋์ฌ์ง์ฒ๋ผ ์ฑ ์ํคํ ์ณ๋ฅผ ๊ตฌ์ฑํ ๊ฒ์ Clean Architecture๋ผ๊ณ ํ๋ค.
https://blog.coderifleman.com/2017/12/18/the-clean-architecture/
์ด ํ๊ธ ๋ฒ์ญ๋ณธ์ ์ฐธ๊ณ ํ์๋ค !
์ฐ์ ์๋ค์ ๊ณ์ธต์ ๋๊ณ ์๋ค.
์์ชฝ์ ์๋ค์ ์ ์ฑ (Policy)์ด๊ณ ๋ฐ๊นฅ ์๋ค์ ๋ฉ์ปค๋์ฆ(Mechanism)์ด๋ค.
์ด ์๋ค ์ฌ์ด์๋ ๊ท์น์ด ์กด์ฌํ๋๋ฐ ๋ฐ๊นฅ์ชฝ ์์์ ์ ์ธ๋ ๊ท์น์ ์์ชฝ ์์ผ๋ก ๋ค์ด์ฌ ์ ์๋ค. ์ฆ ์ฐธ์กฐ, ์ฌ์ฉ ๋ชจ๋ ์๋๋ค.
์ด ๊ท์น์ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ ์งํ ์ ์๋ค๊ณ ํ๋ค.
1.์ํฐํฐ
์ํฐํฐ๋ ๋๊ท๋ชจ ํ๋ก์ ํธ ๋ ๋ฒจ์ ๋น์ง๋์ค ๊ท์น์ ์บก์ํ ํ๋ค. ๋๊ท๋ชจ ํ๋ก์ ํธ๊ฐ ์๋ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ๋ฟ์ด๋ผ๋ฉด ์ํฐํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ง๋์ค ๊ฐ์ฒด๋ก์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๊ณ ์์ค์ ๊ท์น์ ์ง๋๋ค. ๋ณ๋ ๊ฐ๋ฅ์ฑ์ด ์ ๋ค.
2. ์ ์ฆ์ผ์ด์ค
์ด ๊ณ์ธต์ ์ํํธ์จ์ด๋ ์ํฐํฐ๋ก๋ถํฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์กฐํฉํ๋ค. ์ด ๊ณ์ธต์ผ๋ก๋ถํฐ์ ์์ ์ฌํญ์ด ์ํฐํฐ์ ์ํฅ์ ์ฃผ์ง ์์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค, UI ๋๋ ๊ณตํต์ ํ๋ ์์ํฌ์ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ์ํฅ ๋ฐ์ง ์์ ๊ฒ๋ ๊ธฐ๋ํ๋ค. ํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ์์ ๋ํ ๋ณ๊ฒฝ์ ์ ์ฆ์ผ์ด์ค์ ์ํฅ์ด ์๊ณ ์ด ๊ณ์ธต์ ์ํํธ์จ์ด์ ์ํฅ์ด ์์ ๊ฒ์ ๊ธฐ๋ํ๋ค.
3. ์ธํฐํ์ด์ค ์ด๋ํฐ
์ด ๊ณ์ธต์ ์ํํธ์จ์ด๋ ์ด๋ํฐ์ ์งํฉ์ด๋ค. ์ ์ฆ์ผ์ด์ค์ ์ํฐํฐ์ ์์ด ์ฉ์ดํ ํ์์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ์น ๋ฑ ์ธ๋ถ ๊ธฐ๋ฅ์ ์ฉ์ดํ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ค. ์๋ฅผ ๋ค์ด GUI์ MVC ์์ผํ ์ณ๋ฅผ ์์ ํ ๋ดํฌํ๋ค. ํ๋ ์ ํฐ, ๋ทฐ, ์ปจํธ๋กค๋ฌ ๋ชจ๋ ์ฌ๊ธฐ์ ์ํ๋ค.
4. ํ๋ ์์ํฌ์ ๋๋ผ์ด๋ฒ
๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ์ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์น ํ๋ ์ ์ํฌ ๋ฑ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์์ํฌ๋ ๋๊ตฌ๋ก ๊ตฌ์ฑ๋๋ค. ex) Network, CoreData
์ฌ์ค ์ ์ดํด๊ฐ ๊ฐ์ง ์์ง๋ง ์๋ ๋จ์ด๊ฐ ๋์ค๋ ๋ถ๋ถ์ ๋๋ฌธ ๋๋ฌธ ์ฐ๊ฒฐํ๋ ์๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ๊ทธ๋ ๋ค.
https://amara.org/ko/videos/0AtjY87egE3m/url/1216370/
์๋ง ๋์์๋ ์๋ค ํ๋ ๋์ค์ ์ฐธ๊ณ ์ฉ์ผ๋ก ๋ณด์์ผ๊ฒ ๋ค.
์์ ์ฝ๋ ๋ถ์ํด๋ณด๊ธฐ
์์ ์ฝ๋์ ํด๋ ๊ณ์ธต ๊ตฌ์กฐ์ด๋ค.
ํฌ๊ฒ ์์ญ์ Domain, Presentation, Data ์ด๋ ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
Domain ๋ถ๋ถ์๋ Entities, UseCase, interface๊ฐ ์๋๋ฐ interface๋ ์๋ฐ ์์๊ด๊ณ์์ ๋ณด๋ ๊ทธ interface์ธ๊ฑฐ ๊ฐ๊ณ repositories ํด๋๋ฅผ ๋ณด๋ฉด Data ์๋ repositories์์ ์ฌ์ฉํ ํด๋์ค๋ค์ ๋ํ ํ๋กํ ์ฝ์ด ์ ์๋์ด ์๋ค.
๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ค๋ฅด๊ฒ ๊ตฌ์กฐํ ํ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
user๋ Presentation ์ View์ interaction ํ๊ณ ๊ทธ ์ฌ์ด๋ฅผ Presenter๊ฐ ๋งค๊ฐํ๋ค. ์ด ์ญํ ์ MVVM ํจํด์์ ViewModel์ด ์ฃผ๋ํ๋ค. viewModel์์ ํ๋ ์ด์์ usecase๋ฅผ excute ํ๊ธฐ ๋๋ฌธ์ Domain Layer์ interactํ ์ ์๋ค.
Data layer์์ API, DB๋ฅผ ๋ด๋นํ๋ค.
Domain layer์ ์๋ repositories protocol์ ๊ตฌํํ ํด๋์ค๋ค์ด ์๊ณ DB๋ฅผ ๊ตฌํํ Core Data๋ค์ด ์กด์ฌํ๋ค.
์ด ์ ๋ฆฌํ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
Domain Use Case์ Data Repository ์ฌ์ด์ Repository Interface Dependency Inversion์ด๋ผ๋๊ฒ ์๋ค.
ํ๊ตญ๋ง๋ก ํ๋ฉด
์์กด์ฑ ์ญ์ ์์น
์ด๋ค.
1. ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋ฉ๋๋ค.
2. ์ถ์ํ๋ ์ธ๋ถ ์ฌํญ์ ์์กดํด์๋ ์๋ฉ๋๋ค.
์ฆ ์ฐ๋ฆฌ๊ฐ Repository๋ฅผ ๊ตฌํํ ์ Domain -> Data์ ์์กด์ฑ์ ๋์จํ๊ฒ ํ๊ธฐ ์ํด protocol ํ์์ผ๋ก ๋ณ๊ฒฝ์ ํ์ฅ์ฑ์ ์ฉ์ดํ๊ฒ ํ ๊ฒ์ ์๋ฏธํ๋ค.
'IOS๐ > ์ํคํ ์ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํคํ ์ณ] RIBs๋ (0) | 2022.05.06 |
---|---|
[์ํคํ ์ณ] ReactorKit์ด๋ (0) | 2022.04.24 |
[์ํคํ ์ณ] MVP ๋ (0) | 2022.01.06 |
[์ํคํ ์ณ] Viper ๋ (0) | 2021.11.29 |
[์ํคํ ์ณ] RiBs tutorial1 ๋ฐ๋ผํ๊ธฐ (0) | 2021.11.13 |
๋๊ธ