์ค๋์ MVx ํจํด ์ค MVP ํจํด์ ๋ํด ์์๋ณด๋ ค๊ตฌ ํ๋ค!!
์ ์ ์๋ ํ์์ MVP ํจํด์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ ์ค์ด์๋๋ฐ ์ด๋ ViewController ๋ง๊ณ Presenter ํ์ผ์ ํ๋ ๋ ๋ง๋ค์ด ํ์ผ์ด ์ ๋ง ๋ง์์๋ ๊ฒฝํ์ ์ด์ด MVP ํจํด์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
MVP ํจํด
Model, View, Presenter 3๊ฐ์ง๋ก ์ด๋ฃจ์ด์ง ํจํด์ด๋ค.
MVC ํจํด๊ณผ ๋ค๋ฅด๊ฒ Presenter์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์๋ค.
์ฐ๋ฆฌ๊ฐ MVC ํจํด์ ํ์ฉํด ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด Controller๊ฐ View์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด View+Controller ์ ๊ผด๋ก ํฉํ์ฌ ๊ฐ๋ฐ๋๋ ๊ฒฝํฅ์ด ์๋ค. ViewController๊ฐ ์ง๋ ์๋ช ์ฃผ๊ธฐ ์ญ์ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์์ด Controller๊ฐ ๋์ฑ์ด ๋น๋ํด์ง๋ค.
์ด๋ฐ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Controller ๋์ Presenter ๊ฐ๋ ์ ๋์ ํ์๋ค.
์ฆ Presenter๋ ์๋ช ์ฃผ๊ธฐ์ ์ฐ๊ด์ด ์๊ณ ์ค๋ก์ง ๋ทฐ์ ์ด๋ฒคํธ์ ๋ฐ์ํด ์ํ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ์ญํ + ๋ทฐ์ ์ํ๋ฅผ ๋ฐ์์์ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
์ํธ์์ฉ ํ๋ ๊ณผ์
1. View์ ์ฌ์ฉ์์ ์ด๋ฒคํธ๊ฐ ๋ค์ด์จ๋ค.
2. View๋ Presenter์๊ฒ ์ด๋ฒคํธ๋ฅผ ์๋ฆฐ๋ค.
3. Presenter๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ๋ก์ง์ ์ํํ๋ค. Model์ ๋ณํ๊ฐ ํ์ํ๋ค๋ฉด ๋ณํ๋ฅผ ์ํํ๋ค.
4. ๋ณํ๋ฅผ View์ ์ ๋ฐ์ดํธ ํ๋ค.
์ด๋ ๊ฒ Presenter๋ Model๊ณผ View ์ฌ์ด ์ค๊ฐ์์ ์ญํ ์ ํ๋ฉฐ ๋ก์ง์ ์ํํ๊ณ ๋์ค์ ์ด ๋ก์ง๋ง ๊ฐ์ง๊ณ Unit Testํ๊ธฐ ์ฉ์ดํ ์ธก๋ฉด๋ ์๋ค! ํ์ง๋ง MVP ํจํด ์ญ์ View์ Presenter๊ฐ ์ด๋ฒคํธ ์ํ์ด ๋ง์ ๊ฒฝ์ฐ ์์กด ๊ด๊ณ๊ฐ ๊ฐํด์ง๋ ๊ฒฝํฅ์ด ์์ด
MVC ํจํด์์ ๋ฌธ์ ์ ๋์๋ View+Presenter๊ฐ ๋น๋ํด์ง์ ์๋ค.
์์
LoginViewController
์์ Presenter๋ฅผ ๊ฐ์ง๋ค.
LoginPresenter๋
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์์ ์ํด๋ ๊ธฐ๋ฅ๋ค์ ํ๋กํ ์ฝ๋ก ๋ช ์ํด๋๊ณ
View์ Model์ ๊ฐ์ง๊ณ ์์ด ์ด๊ณณ์์ ์ ๋ฐ์ดํธ ์์ ์ ์ํํ๋ค.
Presenter์ ๊ธฐ๋ฅ๋ค์ ํ๋กํ ์ฝ๋ก ๋นผ๋์๋๋ฐ ์ด๋ ๊ฒ ํ๋ค๋ฉด ํ์ Unit Test์
LoginPresenter๋ง์ ์ ์ธํด ํ์ ๊ธฐ๋ฅ๋ค์ ์ํํ๋๋ก ํ ์ ์๋ค.
์์ ์๊ธฐํ๋ Presenter๊ณผ View๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์์ ๊ณ ์๋ ํจํด์ด ๋ฐ๋ก MVVM ํจํด์ด๋ผ๊ณ ํ๋ค. ์์ MVP ์ฝ๋๋ฅผ ๋ณด๋ฉด View๋ Presenter๋ฅผ Presenter๋ View๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค. ์ด๋ View์ Presenter๊ฐ ์์ ํ ๋ ๋ฆฝ์ ์ด๋ผ๊ณ ํ ์์์ ๊ฒ์ด๋ค. ํ์ง๋ง MVVM ํจํด์์๋ View๊ฐ ViewModel์ ๊ฐ์ง๊ณ ์์ผ๋ MVP์์ Presenter์ ๋ฌ๋ฆฌ ViewModel์ View๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. ๊ทธ๋ ๋ค๋ฉด view๋ฅผ ๋ชจ๋ฅด๋ฉด์ ์ด๋ป๊ฒ ์ ๋ฐ์ดํธ ํด์ค ์ ์๋ ๊ฒ์ผ๊น ?
MVVM์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค ํ๋๋ Data Binding์ด๋ค. View์์ ์ธํ ๋๋ ์์ํ์ผ๋ก ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋ฐ์ดํฐ๋ค์ ViewModel๊ณผ ๋ฐ์ธ๋ฉํ๋ ์์ ์ ์ํํ๋ค. ๋ฐ๋ผ์ ViewModel์ View์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ค์ ํ์ฉํด ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ ํ๊ณ ์ด๋ฅผ ๋ค์ view์ ์ ๋ฐ์ดํธ ํ ์ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก MVVM ํจํด์์๋ View ๋ถ๋ถ์ด ์ค๋ก์ง View๋ง์ ์ ๋ฐ์ดํธ ํ๋๋ฐ ์ฝ๋ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ๋ช ํํ ํ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ MVVM์ ๋ํด ์ ๋ฆฌ ํ ๊ธ์ด ์์ผ๋ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค !!
์ด๋ ๊ฒ MVC ~ MVP ~ MVVM ํจํด์ ๊ฐ๊ฐ ์์๋ณด์๋ค. ์์๋ ๋ค์ฃฝ๋ฐ์ฃฝ์ด์์ง๋ง MVVM ํจํด์ผ๋ก ์์ฑํ ์ฝ๋ ์ค ViewModel์ View์ ์ผ์ ์ฃผ์ ํด์ค ์๋ฐ(?) ์ด ์๊ฐ๋์ ๊ณ ์น๋ฌ ๊ฐ์ผ ํ ๋ฏํ๋ค !!
'IOS๐ > ์ํคํ ์ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ํคํ ์ณ] RIBs๋ (0) | 2022.05.06 |
---|---|
[์ํคํ ์ณ] ReactorKit์ด๋ (0) | 2022.04.24 |
[์ํคํ ์ณ] MVVM (clean-architecture) ์ด๋ (0) | 2021.12.22 |
[์ํคํ ์ณ] Viper ๋ (0) | 2021.11.29 |
[์ํคํ ์ณ] RiBs tutorial1 ๋ฐ๋ผํ๊ธฐ (0) | 2021.11.13 |
๋๊ธ