Model - View - Controller ์ํฐํด์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
MVC๋?
MVC๋ Model - View - Controller ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋์์ธ ํจํด์ผ๋ก, ์ด ํจํด์ ์ ์ฉํ๋ ์ฑ์ ๊ฐ์ฒด๋ ์์ ๋งํ ์ธ ๊ฐ์ง ์ญํ ์ค ํ๋๋ฅผ ๋ถ์ฌ๋ฐ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฒํผ์ View ์ญํ ์ ๋ถ์ฌ๋ฐ๋๋ค.
๋ํ ์ด ํจํด์ ๊ฐ์ฒด๊ฐ ์ฑ์์ ์ํํ๋ ์ญํ ์ ์ ์ํ ๋ฟ๋ง ์๋๋ผ, Model - View - Controller ๊ฐ ์๋ก ์ํธ์์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ ์ํ๋ค. ๋ค์ด์ด ๋์ค๊ฒ ์ง๋ง View์ Model์ ์๋ก ์ง์ ์ํธ์์ฉํ์ง ์์ผ๋ฉฐ, ์ค๊ฐ์์ Controller๊ฐ ์๋ก๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ์ญํ ์ ์ํํ๋ค.
์ด ์ธ ํ์ ๊ฐ๊ฐ์ ์๋ก ์ถ์์ ์ธ ๊ฒฝ๊ณ๋ก ํ์ฌ๊ธ ๋ถ๋ฆฌ๋์ด์์ผ๋ฉฐ, ๊ฒฝ๊ณ๋ฅผ ๋์ด ๋ค๋ฅธ ํ์ ์ ๊ฐ์ฒด๋ค๊ณผ ์ํธ์์ฉํ๋ค.
MVC ํ์ ๋ค์ ๊ฐ ๋ชจ์๋ค์ ๊ณ์ธต(layer)์ผ๋ก ๋ถ๋ฆฐ๋ค. ( Model layer / View layer / Controller layer )
MVC์ ์ด์
MVC๋ Cocoa ์ฑ์ ์ข์ ๋์์ธ์ ์์ด ํต์ฌ์ ์ด๋ค. ์ด ํจํด์ ์ฑํํ์ฌ ์ป์ ์ ์๋ ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ์ธํฐํ์ด์ค ์ ์ ์ฉ์ด
- ์ข์ ํ์ฅ์ฑ
- Cocoa ๊ธฐ์ ๊ณผ ๊ตฌ์กฐ๋ MVC์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ผ๋ฉฐ, ์ปค์คํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๊ฒฝ์ฐ MVC ์ญํ ์ค ํ๋๋ฅผ ์ดํํด์ผ ํ๋ค.
Model ๊ฐ์ฒด
Model ๊ฐ์ฒด๋ ๋ฐ์ดํฐ๋ฅผ ์บก์ํํ๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ก์ง๊ณผ ์์ ์ ์ ์ํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ๋๋ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด Person์ด๋ผ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ๊ตฌ์กฐ์ฒด๋ก ๋ชจ๋ธ์ ๋ง๋ค๊ณ , ๊ตฌ์กฐ์ฒด ์์ name ํ๋กํผํฐ์ say๋ผ๋ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฑธ ์๊ฐํ๋ฉด Model์ ์ญํ ์ด ๋ฌด์์ธ์ง ์ฝ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ์ด์ธ์๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฑ์ ์์ ๋ Model์ ํด๋นํ๋ค.
struct Person {
let name: Sting
func say() {
print("์๋
? ๋๋ \(name)์ด์ผ")
}
}
Model ๊ฐ์ฒด๋ ๋ค๋ฅธ Model ๊ฐ์ฒด์ ์ผ๋๋ค ๊ด๊ณ๋ฅผ ๊ฐ์ง ์ ์๋ค. ๋ฐ๋ผ์ Model ๊ณ์ธต์ ํ๋ ์ด์์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊ฐ์ง๋ค.
ํ์ผ ๋๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ๋ฐ์ดํฐ๊ฐ ๋ก๋๋ ํ์๋ Model ๊ฐ์ฒด์ ์ํด์ผ ํ๋ค. Model ๊ฐ์ฒด๋ ํน์ ๋ฌธ์ ๋ถ์ผ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์, ์ ์ฌํ ๋ฌธ์ ์ ๋ํด ์ฌ์ฌ์ฉ๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด ํ๋กํ ๋ฐ์ดํฐ ๋ก๋ ์, ๋ง์ดํ์ด์ง์์๋ ์ฌ์ฉํ ์ ์๊ณ ๋ค๋ฅธ ์ฌ๋์ ํ๋กํ์ ๋ณผ ๋๋ ์ฌ์ฉํ ์ ์๋ค. Model๊ณผ View ๊ฐ์ ์ด์์ ์ธ ๊ด๊ณ๋ก๋ ์ง์ ์ ์ธ ์ฐ๊ฒฐ์ด ์๋ ๊ฒ์ด๋ค. ์ฆ, model ๊ฐ์ฒด๊ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ presentation์ ๊ด๋ จ๋ผ์๋ ์ ๋๋ค.
Commnuication
๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์์ ํ๋ view ๊ณ์ธต์์์ ์ฌ์ฉ์ ์ก์ ์ controller๋ฅผ ํตํด ์ํธ์์ฉํ๋ฉฐ, ์ด๋ model ๊ฐ์ฒด ์์ฑ ๋๋ ์ ๋ฐ์ดํธํ๋ค. ์๋ฅผ ๋ค์ด ํ๋กํ ์์ฑ ์ TextField์ ์ด๋ฆ์ ์ ์ด ํ ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ํ๋กํ ์์ ์ TextField์ ์๋ ์ด๋ฆ์ ์์ ํ ๋ค '์๋ฃ' ๋ฒํผ์ ์ ํํ๋ฉด ์ฌ์ฉ์ ์ก์ ์ด view๋ฅผ ๊ฑฐ์ณ controller๋ก ์ ๋ฌ๋์ด ๋ฏธ๋ฆฌ ๊ตฌํํ ๋ก์ง์ ๋ฐ๋ผ ๊ด๋ จ๋ model ๊ฐ์ฒด๊ฐ ์ ๋ฐ์ดํธ๋๋ค.
๋คํธ์ํฌ ์ฐ๊ฒฐ์ ํตํด ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋์ด model ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋์๋, model ๊ฐ์ฒด๋ controller ๊ฐ์ฒด์๊ฒ ์ด๋ฅผ ์๋ฆฌ๊ณ (notify), controller ๊ฐ์ฒด๋ ์ด๋ฌํ model ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ ํ view ๊ฐ์ฒด์ ์ ๋ฐ์ดํธํ๋ค.
View ๊ฐ์ฒด
view ๊ฐ์ฒด๋ ๋ฒํผ, ํ
์คํธ, ์ด๋ฏธ์ง ๋ฑ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ฒด์ด๋ค. view ๊ฐ์ฒด๋ ์์ ์ด ํ๋ฉด์ ์ด๋ป๊ฒ ๊ทธ๋ ค์ง์ง๋ ์๊ณ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์ก์
์๋ ์๋ตํ ์ ์๋ค. view ๊ฐ์ฒด์ ์ฃผ์ ๋ชฉ์ ์ ์ฌ์ฉ์์๊ฒ model ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ์ด๋ฌํ view์ model์ ๊ด๊ณ์๋ ๋ถ๊ตฌํ๊ณ , view ๊ฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก MVC ํจํด์์ model ๊ฐ์ฒด์ ๋ถ๋ฆฌ๋๋ค.
view ๊ฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์
๋ด์์ ์ผ๊ด์ ์ธ ๋ชจ์ต์ ๋ณด์ธ๋ค. UIKit ํ๋ ์์ํฌ๋ view ํด๋์ค ๋ชจ์์ ์ ๊ณตํ๊ณ , Interface Builder๋ UIKit์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ญ ๊ฐ์ view ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค.
Interface Builder: Xcode์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ทธ๋ํฝ ํ๊ฒฝ(.nib, .xib)
Communication
view ๊ฐ์ฒด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ controller ๊ฐ์ฒด๋ฅผ ํตํด model ๊ฐ์ฒด์ ๋ฐ์ดํฐ ๋ณํ๋ฅผ ์๊ฒ ๋๊ณ , controller ๊ฐ์ฒด๋ฅผ ํตํด ์ฌ์ฉ์ ์ฃผ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํ๋ฆฌ์ผ์ด์ ์ model ๊ฐ์ฒด์ ์๋ฆฐ๋ค. ์๋ฅผ ๋ค์ด TextField์ ์ ๋ ฅ๋ ํ ์คํธ๋ฅผ model ๊ฐ์ฒด์ ์๋ฆฌ๋ ๊ฒ์ด๋ค.
Controller ๊ฐ์ฒด
controller ๊ฐ์ฒด๋ ํ๋ ์ด์์ view ๊ฐ์ฒด์ ํ๋ ์ด์์ model ๊ฐ์ฒด ์ฌ์ด์ ์ค๊ฐ์๋ก์ ๋์ํ๋ค. ์ฆ controller ๊ฐ์ฒด๋ view ๊ฐ์ฒด model ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ์๊ฒ ํ๊ณ , model ๊ฐ์ฒด๊ฐ view ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํด ์๊ฒ ํ๋ ํ์ดํ์ด๋ค. ๋ํ controller ๊ฐ์ฒด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ค์ ๊ณผ ์์ ์กฐ์ ์ ์ํํ๊ณ , ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ LifeCycle์ ๊ด๋ฆฌํ๋ค.
Communication
ํ controller ๊ฐ์ฒด๋ view ๊ฐ์ฒด์ ์์ฑ๋ ์ฌ์ฉ์ ์ก์ ์ ํด์ํ๊ณ , ์๋กญ๊ฑฐ๋ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ model ๊ณ์ธต์ ์ ๋ฌํ๋ค. model ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋, controller ๊ฐ์ฒด๋ ํด๋น view ๊ฐ์ฒด์ ๊ทธ model ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ ๊ทธ ํ view ๊ฐ์ฒด๋ค์ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ iOS ] MVC - 3 ) Controller ๊ฐ์ฒด (0) | 2023.11.18 |
---|---|
[ iOS ] MVC - 2 ) Model ๊ฐ์ฒด (0) | 2023.11.18 |
[ iOS ] Link Presentation ์์๋ณด๊ธฐ (0) | 2023.08.18 |
[ iOS ] Bounds์ Frame ๋น๊ต - 2. Size (0) | 2023.07.01 |
[ iOS ] Bounds์ Frame ๋น๊ต - 1. ๊ณต์๋ฌธ์์ origin (0) | 2023.06.30 |