MVC, MVP, MVVM Pattern
์ข์ ์ํคํ ์ณ
- Modularity ๊ฐ์ฒด๋ค ๊ฐ ๊ท ํ์๋ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ๋ชจ๋๊ฐ ์์กด์ฑ์ ์ค์ด๊ณ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ณต์กํ ๋ฌธ์ ์์ ํด๊ฒฐํ๊ธฐ ์ํ ํค ํฌ์ธํธ๋ฅผ ์บ์นํ ์ ์์ด์ผํ๋ค
- Testability ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๊ณ ์ฉ์ดํด์ผ ํ๋ค
- Ease of use ์ ์ง๋ณด์ & ์ฌ์ฉ์ ์ฉ์ด์ฑ
1. MVC
1-1. MVC ๊ตฌ์กฐ
Model : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
View : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
Controller : ์ฌ์ฉ์์ ์ ๋ ฅ(Action)์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
1-2. MVC ๋์์์
์ฌ์ฉ์์ Action๋ค์ Controller์ ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค.
Controller๋ ์ฌ์ฉ์์ Action๋ฅผ ํ์ธํ๊ณ , Model์ ์ ๋ฐ์ดํธํฉ๋๋ค.
Controller๋ Model์ ๋ํ๋ด์ค View๋ฅผ ์ ํํฉ๋๋ค.
View๋ Model์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ ๋๋ค.
1-3. View๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๋ฐฉ๋ฒ
View๊ฐ Model์ ์ด์ฉํ์ฌ ์ง์ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ
Model์์ View์๊ฒ Notify ํ์ฌ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ
View๊ฐ Polling์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก Model์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ฌ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ๋ฒ.
1-4. MVC ํน์ง
๊ฐ์ฅ ๋จ์ํ๊ณ ๋ณดํธ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ๋์์ธํจํด
View์ Model ์ฌ์ด์ ์์กด์ฑ์ด ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง ์๋ก ๋ณต์กํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค
Apple MVC ≠ Original MVC
2. Cocoa MVC
1-1. Cocoa MVC ๊ตฌ์กฐ
Model : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
View : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
Controller : Controller๊ฐ View์ Model์ ์ค์ฌ์ ์ญํ
1-2. Cocoa MVC ๋์
์ฌ์ฉ์์ Action๋ค์ View๋ฅผ ํตํด ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค.
View๋ user action์ controller์๊ฒ ๋ณด๋ด๊ณ Model์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ
Model์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ์ดํธ ๋์์์ controller์๊ฒ ์๋ต.
Controller๋ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ View๋ฅผ ์ ๋ฐ์ดํธ
1-3. Cocoa MVC ํน์ง
Controller๊ฐ View๋ฅผ ํฌํจํ๋ ๊ฒ์ ๋ฌผ๋ก , View์ Life Cycle๊น์ง ๊ด๋ฆฌ
View์ Controller๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ด๋ ต๊ณ , ์ฌ์ฌ์ฉ๊ณผ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅ
3. MVP
2-1. MVP ๊ตฌ์กฐ
Model : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
View : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
Presenter : View์์ ์์ฒญํ ์ ๋ณด๋ก Model์ ๊ฐ๊ณตํ์ฌ View์ ์ ๋ฌ
2-2. MVP ๋์
์ฌ์ฉ์์ Action๋ค์ View๋ฅผ ํตํด ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค.
View๋ ๋ฐ์ดํฐ๋ฅผ Presenter์ ์์ฒญํฉ๋๋ค.
Presenter๋ Model์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
Model์ Presenter์์ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํฉ๋๋ค.
Presenter๋ View์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๋ตํฉ๋๋ค.
View๋ Presenter๊ฐ ์๋ตํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ ๋๋ค.
2-3. MVP ํน์ง
Presenter๋ View์ Model์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ด ๋์ ์ฐ๊ฒฐํ๋ ์ ์ฐฉ์ ์ญํ ์ ํฉ๋๋ค.
Presenter์ View๋ 1:1 ๊ด๊ณ์ ๋๋ค.
View์ Model์ ์์กด์ฑ์ด ์๋ค. MVP ํจํด์ MVC ํจํด์ ๋จ์ ์ด์๋ View์ Model์ ์์กด์ฑ์ ํด๊ฒฐ
View์ Model ์ฌ์ด์ ์์กด์ฑ์ ํด๊ฒฐ๋์์ง๋ง, View์ Presenter ์ฌ์ด์ ์์กด์ฑ์ด ๋์ ๊ฐ์ง๊ฒ ๋๋ ๋จ์ ์ด ์๋ค.
์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด ์ง ์๋ก View์ Presenter ์ฌ์ด์ ์์กด์ฑ์ด ๊ฐํด์ง๋ ๋จ์ ์ด ์์ต๋๋ค.
4. MVVM
3-1. MVVM ๊ตฌ์กฐ
Model : ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ๋๋ค.
View : ์ฌ์ฉ์์์ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ์ ๋๋ค.
View Model : View๋ฅผ ํํํ๊ธฐ ์ํด ๋ง๋ View๋ฅผ ์ํ Model์ ๋๋ค. View๋ฅผ ๋ํ๋ด ์ฃผ๊ธฐ ์ํ Model์ด์ View๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ถ๋ถ์ ๋๋ค
3-2. MVVM ๋์
์ฌ์ฉ์์ Action๋ค์ View๋ฅผ ํตํด ๋ค์ด์ค๊ฒ ๋ฉ๋๋ค.
View์ Action์ด ๋ค์ด์ค๋ฉด, Command ํจํด์ผ๋ก View Model์ Action์ ์ ๋ฌํฉ๋๋ค.
View Model์ Model์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค.
Model์ View Model์๊ฒ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํฉ๋๋ค.
View Model์ ์๋ต ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ์ ์ฅํฉ๋๋ค.
View๋ View Model๊ณผ Data Bindingํ์ฌ ํ๋ฉด์ ๋ํ๋ ๋๋ค.
3-3. MVVM ํน์ง
View Model๊ณผ View๋ 1:n ๊ด๊ณ
View์ Model ์ฌ์ด์ ์์กด์ฑ์ด ์๋ค.
View์ ViewModel ์ฌ์ด์ ์์กด์ฑ์ด ์๋ค.
๊ฐ๊ฐ์ ๋ถ๋ถ์ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ํ ํ์ฌ ๊ฐ๋ฐํ ์ ์๋ค.
MVVM ํจํด์ ๋จ์ ์ View Model์ ์ค๊ณ๊ฐ ์ฝ์ง ์๋ค๋ ์ ์ ๋๋ค.
VIPER
nightohl.tistory.com/entry/iOS-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8C%A8%ED%84%B4-VIPER
iOS ์ํคํ ์ฒ ํจํด - VIPER
iOS ์ํคํ ์ฒ ํจํด - VIPER ์๋ฌธ ์ถ์ฒ : https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52 ๋ง์ง๋ง ์ฃผ์ VIPER๋ MV(X) ์นดํ ๊ณ ๋ฆฌ๊ฐ ์๋๋ผ๋ ์ ์ด ํฅ๋ฏธ๋กญ๋ค. ์ด์ ๋ ์ฑ ์..
nightohl.tistory.com
์ฐธ๊ณ
https://www.youtube.com/watch?v=bjVAVm3t5cQ
medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
jiyeonlab.tistory.com/38?category=818842
sungdoo.dev/programming/do-you-know-mvc/