์์ฆ mvvm ํจํด์ด ๋ฌด์์ธ์ง ์๊ณ ๋๋๊น๋ ๋ ๋ค๋ฅธ ์ํคํ ์ณ๋ ์๋ ๋ง๊ตฌ ๊นํ์ ์ฐพ์๋ณด๋ ์ค์ด๋ค
์ ๊น ์ฌ์ ๊ฐ ์๊ฒจ์ (๊ณง ๊ธฐ๋ง๊ณ ์ฌ + ๊ณผ์ + ํ ์ค ์ ค .. ํฌํ ) viper ์ํคํ ์ณ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค๊ตฌ ํ๋ค !!
viper ์ํคํ ์ณ๋ ์ด๋ฉด์ ์๋๋ค ๊ทธ๋ ๋ค๊ณ ๊ตฌ๋ฉด๋ ์๋์ง๋ง์ ํํ
์๊ฑธ ๊นํ ์คํ์ ์ฐํด๋๊ฒ ์๊ฐ๋์ ํจํด์ ์กฐ๊ธ ์ดํด๋ณด๊ณ ์์ ๋ก๋ ์ค์ตํด๋ณด๋ ค๊ณ ํ๋ค.
https://github.com/MindorksOpenSource/iOS-Viper-Architecture
์ฐ์ MVx ํจํด๋ค๊ณผ ๋ฌ๋ฆฌ ์๋ค๋ฅธ ์น๊ตฌ๋ค์ด ๋ง์ด ๋ณด์ด๋๊ฑฐ ๊ฐ๋ค.
์ฐ์ ์ฐ๋ฆฌ๊ฐ ์๋ view๋ถํฐ ์ดํด๋ณด์
View
ViewController๋ฅผ ์๋ฏธ, UI ๊ด๋ จ ๋ถ๋ถ๋ง ๋ด๋นํ๋ค.
Presenter๋ฅผ ์์ ํ๊ณ ์์ผ๋ฉฐ(์์กด์ ) ์ด์ ๋ฐ๋ผ ๋ด๋นํ๋ UI๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
Presenter
(์ ์ผ ๊ฐ์ด๋ฐ ์๋ ์น๊ตฌ๋ก ์ ์ผ ๋ฐ๋น ๋ณด์ธ๋ค)
View, Router. Interactor ์ ์์กด์ ์ด๋ฉฐ
View์์ ๋ฐ์ ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ํตํด interactor์๊ฒ ์ ๋ฐ์ดํธ ํ ๊ฒ์ธ์ง ๋ฌผ์ด๋ณธ๋ค
๋๋ Router๋ฅผ ํตํด ํ๋ฉด ์ด๋์ ์ฒ๋ฆฌํ๋ค.
Interactor
๋ชจ๋ธ ๋ก์ง์ ๋ด๋นํ๋ฉฐ Network ํต์ ์ด๋ entity์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ Presenter์๊ฒ ์๋ฆฐ๋ค.
Router(WireFrame)
ํ๋ฉด ์ ํ๊ณผ ์์กด์ฑ ์ฃผ์ ์ ๋ด๋นํ๋ค.
Entity
๊ฐ๊ณต๋๊ธฐ ์ ์ data model์ด๋ค.
ํจํด์ ๋ํ ์ค๋ช ์ ์ด๊ฒ ๋ค๊ตฌ ..! ์ค์ต์ ํตํด ๋ ์ดํด๋ณด์
ํด๋์ ๊ตฌ์ฑ์ ์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋์ด ์๋๋ฏํ๋ค
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ Interactor, Presenter, View, WireFrame(Router)๋ฅผ ๊ณตํต์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.
(Data Manager๋ Core Data๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ๊ณผ ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ์๋ตํ๋ค)
์ฐ์ ์ฑ์ด ์ฒ์ ์คํ๋ ๋ ์ด๋ป๊ฒ ๋๋์ง appdelegate ํ์ผ๋ถํฐ ์ดํด๋ณด๊ฒ ๋ค.
Frame class๋ ์์์ ๋ณด์๋๊ฒ๊ณผ ๊ฐ์ด View ์ ํ์ ๋ด๋นํ๋ค. ๊ทธ๋์ createPostListModule ํจ์๋ฅผ ๋ถ๋ฌ ์ฃผ์๊ณ PostList์์ ์ฌ์ฉํ view, wireFrame, interactor, presenter, ๋ฑ๋ฑ ์ ์ฃผ์ ํ ๋ค view ์ ํ์ ํด์ฃผ์๋ค.
load๋ postListView๋
Presenter์ Model์ ๊ฐ์ง๊ณ ์๋ค
์ฌ์ฉ์ ์ด๋ฒคํธ๋ Protocol๋ก ์ผ์ด๋ ์ด๋ฒคํธ๋ค์ ์ ๋ฆฌํด๋์๊ณ
TableViewCell์ ํด๋ฆญํ์ ๋
presenter์๊ฒ ํ๋์ ์์ํ๋ค.
showPostDetail์ ์์ธํ ๋ณด๋ฉด์
wireFrame์ด ๋์ค์ฐจ๋ก๋ผ๋ฉฐ
๋ฅผ ํธ์ถํ๋ค.
์ ๊ทธ๋ฆฌ๊ณ viewDidLoad์์ ๊น๋ฐํ๊ณ ๋์น๊ฒ ์๋๋ฐ
presenter.viewDidLoad ์๋ถ๋ถ !์ ๋ฐ๋ผ๊ฐ๋ฉด
interactor์๊ฒ retrievePostListํ๋ผ๋ ํจ์๊ฐ ๋์จ๋ค. ๋ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด
PostListInteractor ํด๋์ค์์๋ PostModel์ isEmpty, id ์ฌ๋ถ, error ๋ ๋ ๋ฑ ๋ฐ์ดํฐ์ ๋ฐ๋ฅธ ๋ค์ํ ๊ฒฝ์ฐ์ ์์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค์ผ ํ ์ง ์ ์ํด ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ง์น MVVM ํจํด์ View Model๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์ด๋ ๊ฒ ๊ฐ๋จํ tableview cell ํด๋ฆญ์ ์์ธํ ๋ด์ฉ์ ๋ณผ ์ ์๋ ๊ตฌ์กฐ์ Viper ํจํด์ ์ฟ๋ณด์๋ค. ์ด๋ ๊ฒ apple์ MVC ํจํด์์ ๋ฒ์ด๋ ๋ ๋ฆฝ์ ์ธ class๋ก ๊ตฌ์ฑ๋ ํจํด์ ๋ณด๋ ios ๊ฐ๋ฐ์ด ๋ฏ์ค๊ฒ ๋๊ปด์ง๊ธฐ๋ ํ๋ค. ์์ ํ ๋ค๋ฅธ ๋ฌธ๋ฒ์ ์ ์ฉํ๋ฏํ .. ํ์ง๋ง ํจํด์ ํ๋ฆ์ ๋ฐ๋ผ ์ญ ์ฝ์ด์๋ดค๋ฏ์ด
Viper์ ์ฅ์
- ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ๋ฅผ ์ํ ์ฝ๋๋ฅผ ๋ถ๋ฆฌ
- ์ฑ ์ ๋ถ๋ฆฌ์ ์์น(SRP)์ ๋ฐ๋ผ ์ญํ ์ ๋ฐ๋ฅธ ๋ถ๋ถ ๋ถ๋ฆฌ
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ์ฉ์ด
์ด ๋ฌด์์ธ์ง ๊ณ ๊ฐ ๋๋์ผ ์ ์๊ฒ ๋๊ฑฐ ๊ฐ๋ค. ํด๋ฆฐ์ฝ๋์ค๋ฝ .. protocol์ ํ์ฉํ ๊ธฐ๋ฅ ๋์ด ๋ฐฉ์์ ์์ฃผ ์ด์ฉํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๋ ๊ธ์ ํฌ์คํ ํ๊ธฐ ์ํด VIPER์ ์ฐธ๊ณ ๋ฌธํ์ ์ดํด๋ณด์์๋
๋๋ ์ฌํ๊น์ง MVVM์ด ์ต๊ณ ์ธ์ค ์์๋๋ ๋ง์ด๋ค MVVM์ rxswift
MVVM ์ฐธ๊ณ ํ ๊ธ์์ MVVM์ binding ๋๋ฌธ์ RxSwift๋ฅผ ์จ์ผ ์ ๋๋ก ๊ตฌํ์ด ๋๋ค๋ ๊ธ์ ๋ณด์๋๋ฐ Binding? ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ ์ฃผ์ ์ ๋ํด ๋ ์ดํด ๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
RiBs ํจํด๋ ๋ ์ดํด๋ณด๊ณ MVVM ํจํด์ ๋ํด ๊ธ๋ ์จ๋ณด๊ณ ๋ ๋ค์ํ ํจํด์ ๊ณต๋ถํด๋ณด๊ณ ์ถ๋ค !!
'IOS๐ > ์ํคํ ์ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํคํ ์ณ] RIBs๋ (0) | 2022.05.06 |
---|---|
[์ํคํ ์ณ] ReactorKit์ด๋ (0) | 2022.04.24 |
[์ํคํ ์ณ] MVP ๋ (0) | 2022.01.06 |
[์ํคํ ์ณ] MVVM (clean-architecture) ์ด๋ (0) | 2021.12.22 |
[์ํคํ ์ณ] RiBs tutorial1 ๋ฐ๋ผํ๊ธฐ (0) | 2021.11.13 |
๋๊ธ