์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ViewPager
- ์๋๋ก์ด๋ RecyclerView
- ์๋ช ์ฃผ๊ธฐ
- android startActivityForResult
- AAC
- ์ฝํ๋ฆฐ
- android recyclerview
- Navigation
- SharedPreferences
- fragment
- Android
- android itemDecoration
- recyclerview
- ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ
- ์๋๋ก์ด๋ ์๋ช ์ฃผ๊ธฐ
- MVVM
- ์๋๋ก์ด๋
- andoid
- ์๋๋ก์ด๋ Bottom Navigation
- MVP
- android SharedPreferences
- android clipToPadding
- kotlin
- ์๋๋ก์ด๋ ์๋๋ก๊ทธ์ธ
- ์๋๋ก์ด๋ ViewPager
- activity
- MVC
- Bottom Navigation
- Today
- Total
my repository
Android :: MVC, MVP ๊ทธ๋ฆฌ๊ณ MVVM ๋ณธ๋ฌธ
๐กMVC
Model + View + Controller
Model = ๋ฐ์ดํฐ
- ๋ฐ์ดํฐ + ์ํ + ๋น์ฆ๋์ค ๋ก์ง = ์ฑ์ ๋๋
- ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ๋ฌถ์ด์ง ์์ ๋ง์ ๊ณณ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
View = xml
- ๋ชจ๋ธ์ ํํ
- ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ UI ๋ถ๋ถ
- UI๋ฅผ ๊ทธ๋ฆฌ๊ณ , ์ฌ์ฉ์์ ์ฑ๊ณผ ์ํธ์์ฉํ ๋ ์ปจํธ๋กค๋ฌ์ ํต์
- ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋ ๊ฐ์ ์ ๋ ฅํ๋ ๋ฑ ํ๋์ ํ ๋ ๋ฌด์์ ํด์ผํ ์ง ์ ๋ชจ๋ฅผ์๋ก ๋ชจ๋ธ์ ์ข ์๋์ง ์์ผ๋ฏ๋ก ๋ณด๋ค ๋ณํ์ ์ ์ฐ
Controller = Activity / Fragment
- ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
- ์ฑ์ ๋ฌถ์ด์ฃผ๋ ์ ์ฐฉ์ ์ญํ
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ์ผ์ ๋ด๋นํ๋ ๋ง์คํฐ ์ปจํธ๋กค๋ฌ ์ญํ
- ๋ทฐ๊ฐ ์ปจํธ๋กค๋ฌ์๊ฒ ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ๋๋ ๋ค๊ณ ์๋ฆฌ๋ฉด, ์ปจํธ๋กค๋ฌ๋ ๊ทธ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ชจ๋ธ๊ณผ ์ํธ์์ฉํ ์ง ๊ฒฐ์ ํ๋ค.
- ๋ชจ๋ธ์์ ๋ฐ์ดํฐ๊ฐ ๋ณํ๋๋ ๊ฒ์ ๋ฐ๋ผ ์ปจํธ๋กค๋ฌ๋ ๋ทฐ์ ์ํ๋ฅผ ์ ์ ํ๊ฒ ์ ๋ฐ์ดํธํ๋๋ก ๊ฒฐ์ ํ ์ ์๋ค.
- ์๋๋ก์ด๋ ์ฑ์์๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ฃผ๋ก ์กํฐ๋นํฐ or ํ๋๊ทธ๋จผํธ
๋์ ๊ณผ์
- ์ฌ์ฉ์์ ์ก์ ๋ค์ Controller์ ๋ค์ด์ค๊ฒ ๋๋ค.
- ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์์ ์ก์ ์ ํ์ธํ๊ณ model์ ์ ๋ฐ์ดํธ
- ์ปจํธ๋กค๋ฌ๋ model์ ๋ํ๋ด์ค view๋ฅผ ์ ํ
- view๋ model์ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ธ๋ค.
ํน์ง
- ์ฝ๋ ๊ตฌ์ฑ์ด ๊ฐ๋จํ๊ณ , controller์ ๊ธฐ๋ฅ์ด ๋ชฐ๋นต๋์ด ์๋ค.
- ๊ฐ๋จํ ๊ตฌ์กฐ์ ์ฑ์ด๋ผ๋ฉด MVC ํจํด์ผ๋ก ์์ฑํ๋๊ฒ ์ง๊ด์ ์ด๊ณ ์์ ๊ณต์๊ฐ ์ ๊ฒ ๋ ๋ค.
- ๋จ์ : View์ Model ์ฌ์ด์ ์์กด์ฑ์ด ๋๊ณ , ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๋ฉด controller์ ๊ธธ์ด๊ฐ ์ ์ ์ปค์ง๊ฒ ๋์ด ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง
๐กMVP
Model + View + Presenter => MVC์์ Controller ๋์ Presenter
์ปจํธ๋กค๋ฌ์ ์ฑ ์์ ๋ฌถ์ด์ง ์๊ณ ๋ ๋ทฐ์ ์กํฐ๋นํฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐํฉํ๋๋ก ํ๋ค.
Model : MVC์ ๋์ผ
View
- ๋ณํ ๊ฒ : ์กํฐ๋นํฐ / ํ๋๊ทธ๋จผํธ๊ฐ ์ด์ ๋ทฐ์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋จ
- ์กํฐ๋นํฐ๊ฐ ๋ทฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์, ํ๋ฆฌ์ ํฐ๊ฐ ์ฝ๋๋ฅผ ๋ง๋ค ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ํน์ ๋ทฐ์ ๊ฒฐํฉ๋์ง ์๊ณ ๊ฐ์ ๋ทฐ๋ฅผ ๊ตฌํํด์ ๊ฐ๋จํ ์ ๋ ํ ์คํธ๋ฅผ ์คํํ ์ ์์
Presenter
- view์์ ์์ฒญํ ์ ๋ณด๋ก model์ ๊ฐ๊ณตํ์ฌ view์ ์ ๋ฌํด์ฃผ๋ ๋ถ๋ถ → view์ model์ ๋ถ์ฌ์ฃผ๋ ์ ์ฐฉ์ ์ญํ
- ๋ณธ์ง์ ์ผ๋ก๋ MVC์ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ง๋ง, ๋ทฐ์ ์ฐ๊ฒฐ๋๋ ๊ฒ์ด ์๋๋ผ ๊ทธ๋ฅ ์ธํฐํ์ด์ค๋ผ๋ ์ ์ด ๋ค๋ฆ
- ์ด์ ๋ฐ๋ผ MVC๊ฐ ๊ฐ์ง ํ ์คํธ ๊ฐ๋ฅ์ฑ ๋ฌธ์ ์ ํจ๊ป ๋ชจ๋ํ/์ ์ฐ์ฑ ๋ฌธ์ ๋ ํด๊ฒฐ
๋์ ๊ณผ์
- ์ฌ์ฉ์์ ์ก์ ๋ค์ view๋ฅผ ํตํด ๋ค์ด์ค๊ฒ ๋๋ค.
- view๋ ๋ฐ์ดํฐ๋ฅผ presenter์ ์์ฒญํ๋ค.
- presenter๋ model์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค.
- model์ presenter์์ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๋ค.
- presenter๋ view์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๋ค.
- view๋ presenter๊ฐ ์๋ตํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ํ๋ฉด์ ๋ํ๋ธ๋ค.
ํน์ง
- Presenter์ View๋ 1:1 ๊ด๊ณ
- ์ฅ์ : view์ model์ ์์กด์ฑ์ด ์๋ค. (MVC ํจํด์ ๋จ์ - view์ model์ ์์กด์ฑ ํด๊ฒฐ) ⇒ presenter๋ฅผ ํตํด์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ธฐ ๋๋ฌธ
- ๋จ์ : view์ model์ ์์กด์ฑ์ ํด๊ฒฐ๋์์ง๋ง, MVC์ ์ ์ฌํ ๋งํผ ํ๋ก๊ทธ๋จ์ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๋ฉด presenter์ ์ฝ๋๋์ด ์ปค์ง๊ณ , view์ presenter ์ฌ์ด์ ์์กด์ฑ์ด ๋์์ง๋ค. ๊ทธ๋์ MVC์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง
๐กMVVM
Model + View + ViewModel
์์ ๊ฐ์ด MVC, MVP์ ๊ฒฝ์ฐ ์กํฐ๋นํฐ๊ฐ ๋ฌด๊ฑฐ์์ง๊ฑฐ๋ ์ข ์์ฑ์ด ๊ฐํด์ ธ ํ ์คํธ๊ฐ ํ๋ค๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค๋ ๋จ์ ์ด ์์๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ํคํ ์ณ ํจํด์ด ๋ฑ์ฅํ๊ณ , ๊ทธ ์ค ํ๋๊ฐ MVVM์ด๋ค.
์๋๋ก์ด๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ MVVM์ ๊ฐ๊ฐ์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์๊ณ , ํ ์คํธ์ ๋ชจ๋ํ๊ฐ ์ฝ๊ณ ๋ทฐ์ ๋ชจ๋ธ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ฐ๊ฒฐ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
Model : MVC์ ๋์ผ
View : MVC์ ๋์ผ
- ๋ทฐ๋ชจ๋ธ์ ์ํด ๋ณด์ฌ์ง๋ Observable ๋ณ์์ ์ก์ ์ ์ ์ฐํ๊ฒ ๋ฐ์ธ๋ฉ
ViewModel
- view๋ฅผ ๋ํ๋ด์ฃผ๊ธฐ ์ํ model
- view๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ถ๋ถ
๋์ ๊ณผ์
- ์ฌ์ฉ์์ ์ก์ ๋ค์ view๋ฅผ ํตํด ๋ค์ด์จ๋ค.
- view์ ์ก์ ์ด ๋ค์ด์ค๋ฉด, command ํจํด์ผ๋ก view model์ ์ก์ ์ ์ ๋ฌํ๋ค.
- view model์ model์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ค.
- model์ view model์๊ฒ ์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ๋ค.
- view model์ ์๋ต ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ์ ์ฅํ๋ค.
- view๋ view model๊ณผ Data Binding ํ์ฌ ํ๋ฉด์ ๋ํ๋ธ๋ค.
=> ์ฆ, ๋ทฐ์์ ๋ทฐ๋ชจ๋ธ๋ก, ๋ทฐ๋ชจ๋ธ์์ ๋ชจ๋ธ๋ก ์์ ์ ์ฒ๋ฆฌํ๋ฉฐ, ๋ทฐ์์ ๋ทฐ๋ชจ๋ธ์ ๊ด์ฐฐ(Observe)ํ์ฌ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ํ๋ฉด์ ๊ฐฑ์ ํ๋ค.
ํน์ง
- MVVM ํจํด์ Command ํจํด๊ณผ Data Binding ๋ ๊ฐ์ง ํจํด์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋จ ⇒ view์ view model ์ฌ์ด์ ์์กด์ฑ ์์ฐ
- viewmodel : view = 1 : n → ์ฌ๋ฌ ๋ทฐ์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ, ์ฝ๋์ ์์ ์ค์ผ ์ ์๋ค.
์ฅ์
- ๋ทฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ด์ฐฐํ๋ค. (LiveData - Observer ํจํด ์ด์ฉ)
- ์๋ช ์ฃผ๊ธฐ๋ก๋ถํฐ ์์ ํ๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ค. => AAC์ ๋ทฐ๋ชจ๋ธ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์กํฐ๋นํฐ/ํ๋๊ทธ๋จผํธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ฅด์ง ์๋๋ค. ์ฆ, ์กํฐ๋นํฐ/ํ๋๊ทธ๋จผํธ์ ์๋ช ์ฃผ๊ธฐ ๋์ ๊ณ์ ์ด์์๊ณ , onDestroy()๊ฐ ํธ์ถ๋ ๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
- ์ญํ ๋ถ๋ฆฌ => UI, ๋น์ฆ๋์ค ๋ก์ง, ๋ชจ๋ธ์ด ๊ธฐ๋ฅ๋ณ๋ก ๋ชจ๋ํ ๋์ด ์์
์ฐธ๊ณ : https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html
'IT > Android (Kotlin)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android :: Activity, Fragment ์๋ช ์ฃผ๊ธฐ (0) | 2022.03.01 |
---|---|
Android :: JetPack - AAC Navigation Component ์ฌ์ฉ๋ฒ (0) | 2022.02.22 |
Android :: RecyclerView ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์ฌ์ฉ๋ฒ (0) | 2020.06.12 |
Android :: Bottom Navigation์ ViewPager ์ฐ๊ฒฐ (0) | 2020.06.10 |
Android :: SharedPreferences๋ฅผ ์ด์ฉํ ์๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ (0) | 2020.06.10 |