์๋ ํ์ธ์๐ ์ค๋์ ์ํคํ ์ฒ ํจํด ๋ช๊ฐ์ง์ ๋ํด ์ ๋ฆฌํด๋ณผ๊น ํฉ๋๋ค!
์ํคํ ์ฒ์ ๋ํด ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ ์ด์ ๋ MVC ํจํด์ผ๋ก ๊ฐ๋ฐํ๋ฉฐ
VC๊ฐ ๋ชจ๋ ์ญํ ์ ๋ด๋นํ๋ค๋ณด๋ ์ ์ ๋ฌด๊ฑฐ์์ง๋ ๊ฒ์ ๋๊ผ๊ณ ..
์ด๋ฌํ MVC ํจํด์ ๋จ์ ์ ๋ํ ๋์์ผ๋ก MVVM ํจํด์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์ MVC, MVP, MVVM ์ํคํ ์ฒ ํจํด์ ๋ํด ์ฐจ์ด์ ์ ์์ฃผ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค!
์ํคํ ์ฒ ํจํด์ด๋?
๋จผ์ , ์ํคํ ์ฒ ํจํด์ด๋ ๋ฌด์์ผ๊น์?
์ํคํผ๋์์ ๋ฐ๋ฅด๋ฉด,
์ํคํ ์ฒ ํจํด์ด๋, ์ฃผ์ด์ง ์ํฉ์์์ ์ํํธ์จ์ด ์ํคํ ์ณ์ ๊ณตํต์ ์ธ ๋ฐ์ ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ ์๋ฏธํ๋ค. ์ํคํ ์ฒ ํจํด์ ์ํํธ์จ์ด ๋์์ธ ํจํด๊ณผ ์ ์ฌํ์ง๋ง ๋ ํฐ ๋ฒ์ฃผ์ ์ํ๋ค.
๊ฐ๋จํ ๋งํ๋ฉด, ์ํคํ ์ฒ ํจํด์ ์ํํธ์จ์ด์ ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ, ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ํด๊ฒฐ์ฑ ์ด๋ผ๊ณ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
MVC (Model-View-Controller)
๋จผ์ , ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋์์ธ ํจํด์ธ MVC๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค!
MVC ํจํด์ Model, View, Controller ์ด๋ ๊ฒ ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ ํจํด์ ๋๋ค.
- Model: ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ด๋น
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI
- Controller: ์ฌ์ฉ์์ Input์ ๋ฐ๊ณ ์ฒ๋ฆฌ
Controller๋ก ์ฌ์ฉ์์ Input(์ ๋ ฅ)์ด ๋ค์ด์ค๊ฒ ๋๋ฉด, ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ Model์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๋ถ๋ฌ์ค๊ณ ,
ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค View๋ฅผ ์ ํํด์ ํ๋ฉด์ ๋ณด์ฌ์ง๋๋ก ํฉ๋๋ค.
iOS์์์ MVC ํจํด์ ๊ธฐ์กด์ MVC ํจํด๊ณผ๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค.
iOS์์๋ View์ Controller๊ฐ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด์๊ธฐ ๋๋ฌธ์ ViewController๊ฐ ๊ฑฐ์ ๋ชจ๋ ์ผ์ ๋ด๋นํฉ๋๋ค.
์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Controller์ ์ญํ ์ UIViewContoller๊ฐ ๋ด๋นํ์ฌ Controller๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ๋ ๋ฐ๊ณ , ๊ทธ์ ๋ํ ์ฒ๋ฆฌ๋ ํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ๋ฟ๋ฆฌ๋ ๊ฒ๊น์ง ๋ชจ๋ ๋งก๊ธฐ ๋๋ฌธ์ Controller๊ฐ ๊ฑฐ์ ๋ชจ๋ ์ผ์ ํ๊ฒ ๋ฉ๋๋ค.
View์ Controller์ ๊ฐํ ์ฐ๊ฒฐ์ฑ ๋๋ฌธ์ ๊ฒฐ๊ตญ Massive View Controller๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ ..
๊ทธ๋์ ๋ฑ์ฅํ๋ ๊ฒ์ด ๋ฐ๋ก MVP ์ ๋๋ค.
MVP (Model-View-Presenter)
MVP ํจํด์ Model, View, Presenter ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ ํจํด์ ๋๋ค.
์์ ์ค๋ช ํ๋ MVCํจํด์์์ ๋จ์ ์ด์๋ Massiveํ Controller์ ์ญํ ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด ๊ณ ์๋ ํจํด์ ๋๋ค.
- Model: ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ด๋น
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI
- Presenter: ๋ก์ง์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ด๋น. View์์ ์์ฒญํ ์ ๋ณด๋ฅผ Model๋ก๋ถํฐ ๊ฐ๊ณตํ์ฌ View๋ก ์ ๋ฌ
UIViewController๊ฐ MVC์์๋ ๊ฑฐ์ ๋ชจ๋ ์ญํ ์ ๋ด๋นํ์ง๋ง, MVPํจํด์์๋ ํ๋ฉด์ ๋ณด์ฌ์ง๋ UI๋ง ๋ด๋นํฉ๋๋ค.
๋์ Presenter๊ฐ ํ๋ฉด์ ์ด๋ค ๊ฒ์ ๋ณด์ฌ์ค์ง๋ฅผ ์ฒ๋ฆฌํด์ค๋๋ค.
์ฌ์ฉ์์ Input์ ๋ฐ๋ ๊ฒ์ View์ด์ง๋ง, ์ฌ์ฉ์์ ์ ๋ ฅ์ด View์ ๋ค์ด์ค๊ฒ ๋๋ฉด View๋ ์ด๋ฅผ Presenter์ ์๋ฆฝ๋๋ค.
Presenter๋ Model์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋ก์ง์ ์ฒ๋ฆฌํด์ View์์ ์์ฒญํ ๊ฒ์ View๋ก ๋ค์ ์ ๋ฌํด์ฃผ์ด View๋ฅผ ๊ฐฑ์ ํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ค์ ๋งํด, View๋ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์ญํ ๋ง ํ๊ณ ๋ฐ์ดํฐ์ ๋ํ ์ฒ๋ฆฌ๋ Presenter์ Model์ด ๋ด๋นํ๋ ๊ฒ์ผ๋ก ์ญํ ์ด ๋ถ๋ฆฌ ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง, ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด View์ Presenter๊ฐ 1:1์ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ณตํต๋ ๋ก์ง์ผ๋ก ๊ตฌ์ฑ๋ ๋ทฐ๋ผ๋ ํ๋ฉดํ๋๋น Presenter๊ฐ ํ๋ ๋ ํ์ํ๊ฒ ๋์ด ์ฝ๋๊ฐ ๋ ๋์ด๋๊ฑฐ๋ ๋นํจ์จ์ ์ธ ๊ตฌ์ฑ์ด ๋ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
MVVM (Model-View-ViewModel)
MVVM ํจํด์ Model, View, ViewModel ์ธ ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ๋ ํจํด์ ๋๋ค.
์์ ๋ ํจํด์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๊ณ ์๋ ํจํด์ผ๋ก, MV์ข ๋ฅ ์ค ๊ฐ์ฅ ์ต๊ทผ์ ๋ฑ์ฅํ ํจํด์ ๋๋ค.
View์ Model์ ์ญํ ์ MVP์ ๋น์ทํ๊ณ Presenter ๋์ ViewModel์ด View์ Model ์ฌ์ด์ ์ค์ฌ์ ์ญํ ์ ํ๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ ๋๋ค.
- Model: ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ด๋น
- View: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI
- ViewModel: View๋ฅผ ํํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง View๋ฅผ ์ํ Model. View์๋ binding์ ํ์ฌ ์ฐ๊ฒฐ ํ View์ ์ก์ ์ ๋ฐ๊ณ ์ ๋ฐ์ดํธ
View๋ก ์ฌ์ฉ์์ Input์ด ๋ค์ด์ค๋ฉด ViewModel์ ์๋ฆฝ๋๋ค.
ViewModel์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ Model์ ์์ฒญํ๊ณ , Model๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ ์ ์ฅํฉ๋๋ค.
์ดํ, ViewModel์ด View์๊ฒ ์ด๋ฅผ ๋ค์ ์ ๋ฌํด์ฃผ์ง ์์ง๋ง, data binding์ผ๋ก ์ธํด ์๋์ผ๋ก View๊ฐ ๊ฐฑ์ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ data binding์ด๋โผ๏ธ
MVVM ํจํด์์ ํ์์ ์ผ๋ก ์๊ตฌ๋๋ ๊ฒ์ผ๋ก, ์ฝ๊ฒ ๋งํด Model๊ณผ UI์์ ๊ฐ์ ์ฑํฌ๋ฅผ ๋ง์ถฐ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ด ํจํด์ ํตํด View์ ๋ก์ง์ด ๋ถ๋ฆฌ๋์ด ์์ด๋ ํ ์ชฝ์ด ๋ฐ๋๋ฉด ๋ค๋ฅธ ์ชฝ๋ ์ ๋ฐ์ดํธ๊ฐ ์ด๋ฃจ์ด์ ธ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.View ๋ถ๋ถ์ SwiftUI๋ก ํ์ฌ ๊ด๋ จ๋ ๋ฐ์ธ๋๋ฅผ Combine์ ๋์์ ๋ฐ์ ํ ์ ์๊ณ , RxSwift๋ฅผ ํ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก data binding์ ๊ตฌํํ์ฌ MVVM ํจํด์ ํ์ฉํ ์ ์์ต๋๋ค.
์์ ๊ทธ๋ฆผ์์ View์ ViewModel ์ฌ์ด์ ํ์ดํ๊ฐ ์๋ฐฉํฅ์ด ์๋ ๊ฒ์ฒ๋ผ View๊ฐ ViewModel์ ๊ตฌ๋ ํ๊ธฐ๋ง ํ๊ณ ,
ViewModel์ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ์์๋ฅผ View์ ์์ฒญ์ ๋ฐ๋ผ ๋ฐ๊พธ๊ธฐ๋ง ํ๋ฉด View๊ฐ ์ด์ ๋ง๊ฒ ๋ฐ๋๊ฒ ๋ฉ๋๋ค.
์ฆ, UI์ ๊ด๋ จ๋ ๊ฐ์ ์์ ํ๋ ๊ฒ์ ๋ชจ๋ View์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ViewModel์์ View์ ๊ฐ์ ๋ํ ์์ ์ ์ ํ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉฐ ๋ฐ์ดํฐ ์์๋ฅผ ๊ฐ์ง๊ณ ๋ง ์๋ ๊ฒ์ ๋๋ค. View๋ ViewModel์ ๋ฐ๋ผ๋ณด๊ณ ์์ผ๋ฉฐ ViewModel์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ฉด ์ด์ ๋ฐ๋ผ UI๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง MVC, MVP, MVVM 3๊ฐ์ง ์ํคํ ์ณ ํจํด ์ฌ์ด์ ์ฐจ์ด์ ์ ์ด์ ์ ๋ง์ถ์ด ์ ๋ฆฌํด๋ณด์๋๋ฐ์!
๋ํ์ ์ธ ์ํคํ ์ฒ ํจํด์ ๋ํด ์ดํดํ๋ ๋ฐ ์กฐ๊ธ์ด๋๋ง ๋์์ด ๋ ์ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์ :)
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค๐๐
[์ฐธ๊ณ ์๋ฃ]
https://www.youtube.com/watch?v=bjVAVm3t5cQ
https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
https://velog.io/@sangjin98/iOS-๋์์ธ-ํจํดMVC-MVP-MVVM-VIPER
'๐ iOS > Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Architecture] UseCase ํ์ฉ๊ธฐ (0) | 2024.08.28 |
---|---|
[Architecture] Clean Architecture (1) | 2024.01.03 |
[Architecture] VIPER ํจํด (1) | 2022.04.15 |