๋ฐ์ํ
MVVM
: MVC์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋์์ธ ํจํด
Model - View - ViewModel
๐ก MVC์ MVVM ๋จ์์ฐจ์ด
- Controller๊ฐ ์๋ ViewModel ๊ณ์ธต์ ๊ฐ์ง๊ณ ์์
- ViewModel ๋ํ Controller์ฒ๋ผ View์ Model์ ์ค๊ฐ ๊ณ์ธต ์ญํ ์ ํจ
1. Model
: ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ๋ด๊ณ ์๋ ๊ณ์ธต (MVC์ Model๊ณผ ๋ง์ฐฌ๊ฐ์ง)
- ๋ฐ์ดํฐ๋ฅผ ๋ด์๋๊ธฐ ์ํ ๊ตฌ์กฐ์ฒด๋ค(struct)
- ๋คํธ์ํฌ ๋ก์ง
- JSON ํ์ฑ ์ฝ๋
- ๋ฑ ...
struct Person { // Person์ ๋ํ ๋ฐ์ดํฐ ๋ด์ ๊ตฌ์กฐ์ฒด
let name: String
var age: Int
init(json: JSON) { // JSON ํ์ฑ
name = json["name"].stringValue
age = json["age"].intValue
}
}
๋ฐ์ํ
2. View
: ์ฑ์ UI์ ๋ํ ์ฝ๋๋ฅผ ๋ด๊ณ ์๋ ๊ณ์ธต
- ๊ฐ ์ปดํฌ๋ํธ์ ๋ํ ์ ๋ณด
- ๋ฐฐ์น ์ ๋ณด
- ์ฌ์ฌ์ฉ์ฑ์ด ๊ฐ์กฐ๋จ
3. ViewModel
: ์ฑ์ ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๊ณ ์๋ ๊ณ์ธต
- view์ model ์ฌ์ด์์ view์ ์์ฒญ์ ๋ฐ๋ผ ๋ก์ง์ ์คํํ๊ณ , model์ ๋ณํ์ ๋ฐ๋ผ view refresh ๋ฑ..
๐กMVC → MVVM ๋์ด๊ฐ๋ ์ด์ ?
- ๊ธฐ์กด์ ๋ง์ด ์ฌ์ฉํ UIKit ํ๋ ์์ํฌ๋ MVC ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก์
- ์ต๊ทผ์ ๋์จ SwiftUI๋ MVVM ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํจ
- UIKit์์ ViewController๊ฐ, SwiftUI์์ View๊ฐ ์ฃผ์ธ๊ณต
UIKit
- UIKit์ MVC์์ ViewController๊ฐ ๊ฑฐ์ ๋ชจ๋ ์ญํ ์ ํ์. ViewController๋ View์ Model ๊ณ์ธต์ ๋ชจ๋ ์์
- ViewController๋จ์๋ก ํ ํ๋ฉด์ด ๊ตฌ์ฑ๋จ → Controller๋ View์ Model์ ๋ชจ๋ ์๊ณ ์์ด์ผ ํจ
- ViewController๋ ๋น์ฆ๋์ค๋ก์ง ์ธ์๋ View์ ๋ํ ์ค์ , ์์ ๋ฑ์ ์ฝ๋๋ฅผ ํฌํจ → View์ Controller ๊ณ์ธต์ ์ ๋๋ก ๋ถ๋ฆฌX → ViewController์ ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ๋ฐ์
SwiftUI
- View๊ฐ ViewModel ์์ , ViewModel์ด Model์ ์์ ํ๋ ๋ฐฉ์
- ํ๋ฉด์ ์ฃผ๋ํ๋ ๊ฒ์ View → ViewModel์ Model๋ง ์๋ฉด๋จ (View ์ ํ์X)
- ViewModel์ ๋น์ฆ๋์ค๋ก์ง๋ง ๊ฐ์ง๋๋ก ๊น๋ํ๊ฒ ๋ถ๋ฆฌ๋์ด์์ → ์ฝ๋ ๊ธธ์ด ์งง์! ๐
- ๊ฐ ๊ณ์ธต์ด ๋์ฑ ๋ชจ๋ํ๋์ด์์ → ํ ์คํธํ๊ธฐ ์ฉ์ด
๐ User ์ํธ์์ฉ์ด ์ผ์ด๋ฌ์๋.. (์: ๋ฒํผ ๋๋ฆ)
- MVC : user ์ํธ์์ฉ์ด ์ผ์ด๋ฌ์์ View → Controller๋ก ์๋ฆผ & ๊ทธ์ ๋ฐ๋ผ ์ด๋ค ํ๋์ ํ ์ง๋ Controller๊ฐ ์ ํจ
- MVVM : ์ด๋ค ํ๋์ ํ ์ง๋ View๊ฐ ์ ํจ. ViewModel์ ๋ก์ง๋ง ๊ฐ์ง๊ณ ์์
๐ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์๋.. (์: ๋ฒํผ ๋๋ฆ)
- MVC : ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์์ Model → Controller๋ก ์๋ฆผ & ๊ทธ์ ๋ฐ๋ผ View๋ฅผ ๋ค์ ์ด๋ป๊ฒ ๊ทธ๋ฆด์ง๋ Controller๊ฐ ์ ํจ
- MVVM : ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ฌ์์ Model → ViewModel๋ก ์๋ฆผ & ViewModel์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ก View์๊ฒ ์ ๋ฌํ๋ ์ญํ ๋ง ํ๊ณ , View๊ฐ ์์์ ๋ค์ ๊ทธ๋ฆผ
728x90
๋ฐ์ํ
'Computer Science > swift ๋ฝ๊ฐ๊ธฐ - ์ฐธ๊ณ ์ฌ์ดํธ ์ ์ฅ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[xcode] Info.plist ํ์ผ์ ์ ์ฒด ์์๋ณด๊ธฐ (0) | 2022.07.31 |
---|---|
[Pod error] sudo gem install cocoapods ์คํ ์ ์๋ฌ (ํด๊ฒฐ๋ฒ ํฌํจ) (0) | 2022.06.24 |
[xcode] xcode์ audio asset ์ถ๊ฐ (local๋ง๊ณ ..!) (0) | 2022.01.28 |
[xcode] xcode๋น๋์ ์ปดํจํฐ ์ฃฝ์/xcode ๋ฉ๋ชจ๋ฆฌ ๋์ํ์/xcode memory leak (ํด๊ฒฐ๋ฐฉ๋ฒO) (0) | 2022.01.09 |
[swift] Alamofire๋? Alamofire ์ฌ์ฉ๋ฒ ๋ฝ๊ฐ๊ธฐ (0) | 2022.01.02 |
[swift] Metal vs OpenGL (0) | 2021.12.27 |
[swift] swiftui zindex ์ซ์ (0) | 2021.11.19 |
[swift] swiftui Text ์ฌ์ด์ฆ์ ๋ง์ถฐ์ frameํฌ๊ธฐ ์ ํ๊ธฐ (fixedSize) (0) | 2021.11.18 |