MVC
MVVM
๋์์ธ ํจํด์ด๋ ํ๋ก๊ทธ๋จ์ด๋ ์ด๋ค ํน์ ํ ๊ฒ์ ๊ฐ๋ฐํ๋ ์ค์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ค์ ์ ๋ฆฌํด์ ์ํฉ์ ๋ฐ๋ผ ๊ฐํธํ๊ฒ ์ ์ฉํด์ ์ธ ์ ์๋ ๊ฒ์ ์ ๋ฆฌํ์ฌ ํน์ ํ "๊ท์ฝ"์ ํตํด ์ฝ๊ฒ ์ธ ์ ์๋ ํํ๋ก ๋ง๋ ๊ฒ์ ๋งํฉ๋๋ค.
Model-View-Controller
์ดํ๋ฆฌ์ผ์ด์ ์ ์ธ ๊ฐ์ ์์ญ์ผ๋ก ๋ถํ ํ๊ณ ๊ฐ ๊ตฌ์ฑ ์์์๊ฒ ๊ณ ์ ํ ์ญํ ์ ๋ถ์ฌํ๋ ๊ฐ๋ฐ ๋ฐฉ์์ ๋๋ค. MVC ํจํด์ ๋์ ํ๋ฉด ๋๋ฉ์ธ(๋น์ฆ๋์ค ๋ก์ง) ์์ญ๊ณผ UI ์์ญ์ด ๋ถ๋ฆฌ๋๋ฏ๋ก ์๋ก ์ํฅ์ ์ฃผ์ง ์๊ณ ์ ์ง๋ณด์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB), ์์, ๋ฌธ์์ด๊ณผ ๊ฐ์ ๋ณ์๋ค, ๋น์ ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด ์นด๋ฉ๋ผ ์ ๋ณด์ ๊ฐ์ ๊ฒ๋ค์ด ํด๋น๋ฉ๋๋ค. ๋ชจ๋ธ์๋ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ์ ๋ณด๊ฐ ์ ํ ์์ต๋๋ค. ๋จ์ง, ์ ๋ณด๋ง ๋ฐํํ๊ฑฐ๋ ์ค์ ํ ์ ์์ต๋๋ค.
ํ ์คํธ๋ฐ์ค, ๋ผ๋ฒจ, ๋ฒํผ ๋ฑ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(User interface) ์์๋ค์ ์๋ฏธํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ์ดํ๊ณ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๋ ์์ญ์ ๋๋ค. ๋ทฐ์์๋ ๋ณ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ์ง ์์ต๋๋ค. ๋ทฐ์์ ์ ๋ ฅ๋ฐ๊ณ ์ถ๋ ฅํด์ฃผ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด์ผํฉ๋๋ค.
๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๊ด์ฅํ๋ ๋ธ๋ฆฟ์ง(Bridge)์ญํ ์ ์ํํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ด๋ฒคํธ๋ ๋ทฐ์์ ๋ฐ์ํ์ง๋ง ๋ด๋ถ ์ฒ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๋ํ, ์ ๋ ฅ์ด ๋ฐ์ํ๋ฉด ์ด์ ๋ํ ํต์ง๋ฅผ ๋ด๋นํฉ๋๋ค.
model 1์ ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ๊ฐ์ด ๊ตฌํํ๋ ๋ฐฉ์์ ๋๋ค. ๋น ๋ฅด๊ณ ์ฌ์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ์ง๋ง, ์ปจํธ๋กค๋ฌ์ ๋ทฐ์ ์ฝ๋๊ฐ ์์ฌ์์ด ์ ์ง๋ณด์๊ฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
model 2๋ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ , ์ฝ๋๋ฅผ ์์๋ณด๊ธฐ ํ๋ค๋ค๋ model 1์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ๋ถ๋ฆฌํด์ ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค. ์์ ์๊ฐ์ model 1๋ณด๋ค ๊ธธ์ด์ง์ง๋ง, ์ถํ์ ํ๋ก๊ทธ๋จ์ด ์ปค์ง๊ณ ์ ์ง๋ณด์๊ฐ ํ์ํ ๋๋ model 2 ๋ฐฉ์์ด ๋ ์ ๋ฆฌํฉ๋๋ค.
-
Process
-
Controller๋ก ์ฌ์ฉ์์ ์ ๋ ฅ์ด ๋ค์ด์จ๋ค.
-
Controller๋ Model์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ๋ฐ ์ฝ์ด์จ๋ค.
-
Model์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค View๋ฅผ ์ ํํด์ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
-
์งง๊ฒ ๋งํ๋ฉด ํจ์จ์ ์ธ ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ํด์ ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๋ณด๋ View, Model, ์ด๋ฅผ ์ ์ดํ๋ Controller๋ก ๊ฐ๊ฐ ๋ถ๋ฆฌํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ฉด, ์ค๋ณต๊ฐ๋ฐ๋๋ ๋ถ๋ถ์ ๋ฐฉ์งํ ์ ์์ด ๊ฐ๋ฐ์ ํจ์จ์ฑ์ด ์ฆ๋๋ ๋ฟ ๋ง ์๋๋ผ, ์ถํ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ ํ์ฅ์ฑ์ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ ํ ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ต์ํ์ ์ํฅ์ ์ฃผ๋ฉฐ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Controller๊ฐ Model๊ณผ View์ ๋ํ ๋ชจ๋ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋์ ๊น์ง๋ ํจ์จ์ ์ธ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง ํ๋ก๊ทธ๋จ์ด ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์ด ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ Controller์์ ์ ๋ฌด๊ฐ ๊ณผ์ค๋ ์ ์์ต๋๋ค.
๊ฐ๋ฐ๊ณผ ์ ์ง ๋ณด์๊ฐ ์ฉ์ดํ๋๋ก ์ค๊ณํ ๋ชจ๋ธ์ด์ง๋ง ์ผ์ ์์ค์ด์์ ๋ณต์กํ ํ๋ก์ ํธ์์๋ ์์ ์ ํ ์คํธ๊ฐ ํ๋ค๊ณ ํ๋์ ์์ ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น๋ ๋ฑ ์ญํจ๊ณผ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์์ ํ ๋ถ๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค๋ ์ ์ด๋ค. ์ด๋ ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ , ์ค๊ณ์๊ฐ์ด ๊ธธ์ด์ง๋ ์์ธ์ด ๋ฉ๋๋ค. -> MVVM, MVP ๋ฑ์ ๋ฑ์ฅ
Model-View-ViewModel
์์ ๋งํ MVC ๋ชจ๋ธ๊ณผ ์ญํ ์ด ๊ฐ์ต๋๋ค.
ํด๋ผ์ด์ธํธ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ, ์ก์ ์ View๊ฐ ์ง์ ์ฒ๋ฆฌํฉ๋๋ค. ์ก์ ์ ๋ฐ๋ผ ViewModel์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํฉ๋๋ค. DataBinding์ผ๋ก ViewModel์ ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํฉ๋๋ค.
View๋ง์ ์ํด ์ ์ ๋, ๊ฐ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ Model์ ๋๋ค. ์ธ๋ถ์์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ๋ช ๋ น์ ๋ฐ์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณต, ์ฒ๋ฆฌํ์ฌ Model๋ก๋ถํฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ป์ด์ต๋๋ค. ์ป์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ๊ณตํ์ฌ ๊ฐ์ง๊ณ ์์ต๋๋ค.
-
Process
-
View์ ์ ๋ ฅ์ด ๋ค์ด์ค๋ฉด Command ํจํด์ผ๋ก ViewModel์ ๋ช ๋ นํจ.
-
ViewModel์ Model์ ํ์ํ ๋ฐ์ดํฐ ์์ฒญ.
-
Model์ ViewModel์ ํ์ํ ๋ฐ์ดํฐ ์๋ต.
-
ViewModel์ ์๋ต๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํด์ ์ ์ฅ.
-
View๋ ViewModel๊ณผ Data Binding์ผ๋ก ์ธํด ์๋์ผ๋ก ๊ฐฑ์ .
-
MVVM ๋ชจ๋ธ์ ํต์ฌ์ DataBinding์ ๋๋ค. ๊ธฐ์กด์ MVC์๋ ๋ค๋ฅด๊ฒ View๊ฐ ์ง์ ViewModel๋ก๋ถํฐ DataBinding์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- DataBinding: ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋ View์ ๋ฉ์๋๋ก ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํด๋ ์๋์ผ๋ก View์ ๋ฐ์์ด ๋ ์ ์๋๋ก ํด ์ฃผ๋ ๊ฒ.
Model์ ์์กด์ฑ์ด ์๋ View, View์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ ์ ํ ๋ถ๋ฆฌ.
ํ ์คํธ๊ฐ ์์ํด์ง๋ค. (์์กด์ฑ์ด ์๊ธฐ ๋๋ฌธ)
๋ทฐ์ ๋ทฐ๋ชจ๋ธ์ด 1:n ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ณต๋๋ ๋ก์ง์ ๋ชจ๋ํ ํด์ ์ฌ๋ฌ ๋ทฐ์ ์ ์ฉํ ์ ์๋ค. (์ฝ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ)
์ค๊ณํ๊ธฐ๊ฐ ๋ณต์กํ๋ค. (๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ํ ์ง์ ํ์)
๋ทฐ๋ชจ๋ธ์ด ๋น๋ํด์ง ์ ์๋ค.
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๊ฐ ์ฌํ๋ค.
- MVC ๋์์ธ ํจํด์ ๋ํด ์๊ณ ์๋์?
- MVC ํจํด์ ์ฌ์ฉํ ๋ ๋ฌธ์ ์ ์ ์๋์?
- MVC ํจํด์ ๋ฌธ์ ์ ์ ์ด๋ค์์ผ๋ก ๊ฐ์ ํ ์ ์๋์?