์ํํธ์จ์ด ๋์์ธ์์ ๊ณตํต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ
์ ๋งํ๋ค. ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉ๋ ์ ์๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋๋ฐ์ ์ฐ์ด๋ ํ
ํ๋ฆฟ์ ์๋ฏธํ๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ดํ๋ฆฌ์ผ์ด์
์ด๋ ์์คํ
์ ๋์์ธํ ๋ ๊ณตํต๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋๋ฐ์ ์ฐ์ด๋ ํ์ํ ๋ ๊ฐ์ฅ ์ข์ ํจํด์ด๋ค. ๋จ์ ์ผ๋ก๋ '์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ก ', ๊ถ๊ทน์ ์ผ๋ก๋ ๊ฑด๊ฐํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํ ๋ฐฉ๋ฒ๋ก ์ด๋ผ๊ณ ํ ์ ์๋ค.
โ
Android์์ ์ ๋ช ํ architecture์๋ย MVC, MVP, MVVM๊ฐ ์กด์ฌํ๋ค.
MVC ํจํด์ Model, View, Controller๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
Model(๋ชจ๋ธ): ์ดํ๋ฆฌ์ผ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ๋ด๋นํ๋ค. <๋ฐ์ดํฐ + ์ํ + ๋น์ฆ๋์ค ๋ก์ง>์ ๋ค๋ฃฌ๋ค.
SQLite, File, content provider๊ฐ ์ด ์์ญ์ ์ํ๋ค. View์ ์์กด์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
View(๋ทฐ): ํ๋ฉด ๊ตฌ์ฑ์ ๋ด๋นํ๋ ์์ญ์ด๋ค. View ํด๋์ค๋ฅผ ์์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ฑํ ์ ์๋ค.
Model๋ก๋ถํฐ data๋ฅผ ๋ฐ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค๋ค.
Controller(์ปจํธ๋กค๋ฌ): View์ Model์ ์๋ก ์ฐ๊ฒฐํ๊ณ ์ ์ดํ๋ ์์ญ์ด๋ค.
activity, service, broadcast receiver, fragment๊ฐ ํฌํจ๋๋ค.
์ฌ์ฉ์์ ์
๋ ฅ(Action)์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ค. Model์ data ๋ณํ์ ๋ฐ๋ผ View๋ฅผ ์ ํํ๋ค.
๋์
(1) ์ฌ์ฉ์์ Action์ด Controller์ ๋ค์ด์จ๋ค.
(2) Controller๋ ์ฌ์ฉ์์ Action์ ํ์ธํ๊ณ , Model์ ์
๋ฐ์ดํธํ๋ค.
(3) Controller๋ Model์ ๋ํ๋ด์ค View๋ฅผ ์ ํํ๋ค.
(4) View๋ Model์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ธ๋ค.
ํน์ง
(1) Controller๋ ์ฌ๋ฌ ๊ฐ์ View๋ฅผ ์ ํํ ์ ์๋ 1:N ๊ตฌ์กฐ์ด๋ค.
(2) Controller๋ View๋ฅผ ์ ํํ ๋ฟ ์ง์ ์
๋ฐ์ดํธํ์ง ์๋๋ค.(View๋ Controller๋ฅผ ๋ชจ๋ฅธ๋ค)
(3) View์ Model์ ์๋ฒฝํ๊ฒ ๋ถ๋ฆฌํ๊ณ , Model ํ
์คํธ๊ฐ ์ฉ์ดํ๋ค.
๋จ์
(1) Controller๊ฐ Android API์ ์ข
์๋์ด ํ
์คํธ๊ฐ ์ด๋ ต๋ค
(2) View๋ฅผ ๋ณ๊ฒฝํ๋ฉด Controller๋ ๋ณ๊ฒฝํด์ผ ํ๋ค.
(3) ๋ง์ ์ฝ๋๋ค์ด Controller์ ์ง์ค๋๋ฉด ์ฑ๋ฅ์ด ์ ํ๋๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
(4) ๋ผ์ด๋ธ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋น๋ฒํ application ์ผ์๋ก ์น๋ช
์ ์ผ ์ ์๋ค.
โ
MVP ํจํด์ ์๋๋ก์ด๋์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ํจํด์ผ๋ก, Model, View, Presenter๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
Model(๋ชจ๋ธ): ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค. MVC์ Model๊ณผ ๋์ผํ๋ค.
View(๋ทฐ): ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด Presenter๋ก ์๋ฆฐ ํ ๋ฐํ๋ฐ์ ๊ฒ์ ๋ฐ๋ผ UI๋ฅผ ๊ฐฑ์ ํ๋ค.
Presenter(ํ๋ ์ ํฐ): MVC์ Controller์ ์ญํ ์ด์ง๋ง View์ ์ ํ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ์ธํฐํ์ด์ค์ด๋ค.
View์์ ์ ๋ฌ๋ฐ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ค์ View๋ก ๋ฐํํ๋ค.
Model์ ๋ฐ์ดํฐ ์์ฒญ์ด ํ์ํ ์ด๋ฒคํธ๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ Model์ ์์ฒญํ ํ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ View์ ์ ๋ฌํ๋ค.
๋์
(1) ์ฌ์ฉ์์ Action์ด View๋ฅผ ํตํด ๋ค์ด์จ๋ค.
(2) View๋ data๋ฅผ Presenter์๊ฒ ์์ฒญํ๋ค.
(3) Presenter๋ Model์๊ฒ data๋ฅผ ์์ฒญํ๋ค.
(4) Model์ Presenter์๊ฒ ์์ฒญ๋ฐ์ data๋ฅผ ๋ฐํํ๋ค.
(5) Presenter๋ View์๊ฒ data๋ฅผ ๋ฐํํ๋ค.
ํน์ง
(1) Presenter๋ View์ Model์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ด ๋์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค.
(2) Presenter์ View๋ 1:1 ๊ด๊ณ์ด๋ค.
(3) ๋จ์ Interface์ด๊ธฐ ๋๋ฌธ์ ํ
์คํธ๊ฐ ์ฉ์ดํ๊ณ ๋ชจ๋ํ/์ ์ฐ์ฑ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค.
๋จ์
(1) View์ Presenter ๊ฐ์ ์์กด์ฑ์ด ๋๋ค.
(2) Android API๋ฅผ ์ฐธ์กฐํด์๋ ์๋๋ค.(๊ถ์ฅ)
(3) Controller์ ๊ฐ์ด ์ฝ๋๊ฐ ์ง์ค๋๋ฉด ์ฑ๋ฅ์ด ์ ํ๋๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
โ
MVVM ํจํด์ Model, View, ViewModel๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
Model(๋ชจ๋ธ): ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ViewModel์ ๊ฑฐ์ณ์ View๋ก ์ ๋ฌ๋๋ค.
์๋๋ก์ด๋์์๋ LiveData๋ RxJava ๋ฑ์ ํตํด ๊ตฌํํ ์ ์๋ค.
View(๋ทฐ): ํ๋ฉด์ ํํ๋๋ ๋ ์ด์์์ ๊ด๋ฆฌํ๋ค.
View๋ Model์ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ViewModel์ ์ต์ ๋นํ๊ณ , ์ํ ๋ณํ๊ฐ ์ ๋ฌ๋๋ฉด ํ๋ฉด์ ๊ฐฑ์ ํด์ผ ํ๋ค.
Data Binding์ ์ํด gradle๊ณผ xml์ ์์ ํด์ผํ๋ค. View๋ ViewModel์ ์ํด Model๊ณผ ์ ์ฐํ binding์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
ViewModel(๋ทฐ๋ชจ๋ธ): View์ ์ฐ๊ฒฐํ ๋ฐ์ดํฐ์ ๋ช
๋ น์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ๋ณ๊ฒฝ ์๋ฆผ์ ํตํด View์๊ฒ ์ํ ๋ณํ๋ฅผ ์ ๋ฌํ๋ค. ViewModel์ Model์ ์์ง๋ง View๋ ์์ง ๋ชปํ๋ค. (๊ธฐ๋ณธ์ ์ผ๋ก View์ ์ข
์๋์ง ์๋๋ค.)
View๊ฐ Model์ Event๋ฅผ ์ ๋ฌํ ์ ์๋๋ก Hook(BindingAdapter)์ ์ค๋นํ๋ค.
๋์
(1) ์ฌ์ฉ์์ Action๋ค์ View๋ฅผ ํตํด ๋ค์ด์ค๊ฒ ๋๋ค.
(2) Command pattern์ผ๋ก ViewModel์ Action์ ์ ๋ฌํ๋ค.
(3) ViewModel์ Model์๊ฒ data๋ฅผ ์์ฒญํ๋ค.
(4) ViewModel์ ์๋ต๋ฐ์ data๋ฅผ ๊ฐ๊ณตํ์ฌ ์ ์ฅํ๋ค.
(5) View๋ ViewModel๊ณผ Data Bindingํ์ฌ ํ๋ฉด์ ๋ํ๋ธ๋ค.
ํน์ง
(1) Command Pattern๊ณผ Data Binding์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค.
(2) View์ Model ์ฌ์ด์ ์์กด์ฑ์ด ์๋ค.
(3) View์ ViewModel ์ฌ์ด์ ์์กด์ฑ๋ ์๋ค.
(4) ์์ฒ๋ผ ๋ชจ๋ ๋ถ๋ถ์ด ๋
๋ฆฝ์ ์ด๋ฏ๋ก ๋ชจ๋ํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋จ์
(1) ViewModel์ ์ค๊ณ๊ฐ ์ด๋ ต๋ค.(๋น์ฐํ..)
(2) View๊ฐ ๋ณ์์ ํํ์ ๋ชจ๋์ Binding๋ ์ ์์ผ๋ฏ๋ก ๊ฐ์๋ก presentation logic์ด ๋์ด๋ XML์ด ๋ฐฉ๋ํด์ง๋ค. ์ด๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ํญ์ ViewModel์์ ์ง์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ข๋ค.
โ