#1 ์๋๋ก์ด๋ ์ฑ์ '์ ํต์ ์ธ' ๋ฐฉ์ vs MVVM ํจํด
#1-1 ๋์๋์ ์ข ์์ฑ
ํ์ดํ๋ ํด๋์ค ๊ฐ์ ์ข ์์ฑ์ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด, View๋ ViewModel์ ์ข ์๋๋ค. ์ข ์์ ์ฌ์ ์ ์๋ฏธ๋ '์์ฃผ์ฑ์ด ์์ด ์ฃผ๊ฐ ๋๋ ๊ฒ์ ๋ธ๋ ค ๋ถ์'์ด๋ค. ์ข ์์ '์์์ผ ํ๋ค'๋ผ๋ ๋ง๋ก๋ ํํํ ์ ์๋ค. ๋ฐ๋ผ์ View๋ ViewModel์ ๋ํด ์์์ผ ํ๋ค. ๋ฐ๋ฉด, ViewModel์ View๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค. ViewModel์ ์ค๊ณํ ๋ View์์ ๋ญ ์ด๋ป๊ฒ ํ ์ง ์ ํ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค (๋์ , ViewModel์ Model์ ๋ํด ์ข ์์ ์ด๋ฏ๋ก Model๋ฅผ ์ฐธ์กฐํ๋ฉฐ ์ค๊ณํด์ผ ํ๋ค). View๋ฅผ ์ค๊ณํ ๋ ViewModel์ ์์์ผ ํ๋ค. '์์์ผ ํ๋ ์ชฝ'์์ '๋ชฐ๋ผ๋ ๋๋ ์ชฝ'์ผ๋ก ํ์ดํ๋ฅผ ์ด์ ๊ฒ์ด ์ ๋์๋๋ค.
#1-2 ๋ชจ๋์ฑ๊ณผ ๊ฒฐํฉ๋
์ ํต์ ์ธ ๋ฐฉ์์์๋ Activity๊ฐ UI ๋ก์ง(ํ๋ฉด ํ์ ๋ฐ ์ฌ์ฉ์ ์ํธ์์ฉ ์ฒ๋ฆฌ)๊ณผ ๋น์ฆ๋์ค ๋ก์ง(๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋คํธ์ํฌ ํธ์ถ ๋ฑ)์ ๋ชจ๋ ๋ด๋นํ๋ค. ๋ฐ๋ผ์, Activity์ ์ฝ๋๋์ด ๋ฐฉ๋ํ๋ค. ๋ชจ๋์ฑ์ด ๋ฎ๊ณ , ํ ์คํธ์ ์ ์ง๋ณด์๊ฐ ํ๋ค์๋ค. MVVM ํจํด์ Activity์ UI ๋ก์ง์ View๊ฐ, ๋น์ฆ๋์ค ๋ก์ง์ ViewModel๊ฐ ๋ด๋นํ๋ค. Activity์ ์ฝ๋๋ฅผ ๋ฐ์ฉ ๊ฐ์ ธ๊ฐ๋ค๋ ์ด์ผ๊ธฐ๋ค.
๋, MVVM ํจํด์์๋ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด ์์์ ์ผ๋ก ์ํ๋๋ ๋์์ ์ ์ํ๊ณ , LiveData์ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ๊น์ง ๊ตฌํํจ์ผ๋ก์จ, View์ ViewModel ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋์ฑ ๋ฎ์ถ๋ค.
#1-3 ๊ตฌ๊ธ์ ๊ถ์ฅ ์ค๊ณ
์ ๋์๋์ Repository๋ผ๋ ๋ชจ๋์ด ์ถ๊ฐ๋ก ์๋ค. Repository๋ Model์์ ์ ๊ทผ์ ํ ์ธต ๋ ์บก์ํํ๊ธฐ ์ํ ๋ชจ๋์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. Activity๋ Fragment๋ ViewModel์ ์์์ผํ๊ณ , ViewModel์ Repository๋ฅผ ์์์ผ ํ๋ค. Repository๋ Model์ ์์์ผ ํ๋ค. ๋ฐ๋๋ก, Repository๊ฐ ViewModel์ ์๊ฑฐ๋(= ๋ด๋ถ ๋ณ์ ๋ฑ์ ์ฐธ์กฐํ๊ฑฐ๋), ViewModel์ด Activity๋ Fragment๋ฅผ ์์์๋ (= ๋ด๋ถ ๋ณ์ ๋ฑ์ ์ฐธ์กฐํด์๋) ์ ๋๋ค.
๋ค์์ ๋ด๊ฐ ์ง๊ธ๊น์ง ๊ตฌํํ MVVM ํจํด์ ์ธ๋ถ์ ์ธ ๋ด์ฉ์ด๋ค.
#2 Data Binding
[Android] Data Binding - ๊ธฐ์ด
#1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ ์ #1-1 ์์ ์ฑ ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑ์ด ์๋ค. Button์ ๋๋ฅด๋ฉด, EditText์ text๊ฐ ๋ฐ๋ก ์์ ์๋ TextView์ text์ ๋์ ๋๋ค. ์ด ์ฑ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. #1-2 activity_main.xml #1-3 Main
kenel.tistory.com
Activity์์ ์๋ฅผ ๋ค DataBindingUtil.setContentView(this, R.layout.activity_main)์ ๊ฐ์ ์ฝ๋๋ก View์ ์ฐ๊ฒฐํ๋ค. ์ด ์์ฒด๋ก findViewById()๋ฅผ ์ผ์ผ์ด ์ฌ์ฉํ์ง ์์๋ ๋๊ธฐ์ ๋ฒ์จ ์ฝ๋๋์ด ์ค์ด๋ ๋ค.
[Android] Data Binding - View์ ๊ฐ์ฒด ์ ๋ฌ
#1 ๊ฐ์ฒด ์ ๋ฌ์ ํ์์ฑ #1-1 ์ด์ ๊ธ Data Binding - ๊ธฐ์ด #1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ ์ #1-1 ์์ ์ฑ ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑ์ด ์๋ค. Button์ ๋๋ฅด๋ฉด, EditText์ text๊ฐ ๋ฐ๋ก ์์ ์๋ TextView์ text์ ๋์ ๋๋ค. ์ด
kenel.tistory.com
View์์ Activity ๋๋ ViewModel์ ๊ฐ์ฒด๋ฅผ ์ง์ ์ฐธ์กฐํ ์ ์๊ฒ ๋ง๋ ๋ค.
#3 ViewModel
[Android] ViewModel - ๊ธฐ์ด
#1 View Model์ ํ์์ฑ #1-1 ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด TextView์ text๊ฐ 1์ฉ ์ฆ๊ฐํ๋ ์์ ์ฑ์ด๋ค. MainActivity.kt ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // package com.example.viewmodelbasics import androidx.appcompat.app.AppCompatActivity import and
kenel.tistory.com
ViewModel์ ๋จผ์ , Activity์ ์๋ช ์ฃผ๊ธฐ์ ๋ ๋ฆฝ์ ์ธ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ธฐ์ Activity์ ๋นํด View์ ์ผ๊ด์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค. ์ด๊ฒ๋ ์ฅ์ ์ด์ง๋ง, Activity์ ์๋ ๋ฐ์ดํฐ(Model) ๊ด๋ จ ์ฝ๋๋ฅผ ViewModel๋ก ์ฎ๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ Activity์ ๋ฌด๊ฒ๊ฐ ํ๊ฒฐ ์ค์ด๋๋ ํจ๊ณผ๋ ์๋ค.
[Android] ViewModel - ๋ทฐ ๋ชจ๋ธ์ ์ธ์(Argument) ์ ๋ฌ
#1 ViewModelProvider ํด๋์ค ๋ถ์ #1-1 ์ด์ ๊ธ์ ์์ ์์ [Android] View Model - ๊ธฐ์ด #1 View Model์ ํ์์ฑ#1-1 ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด TextView์ text๊ฐ 1์ฉ ์ฆ๊ฐํ๋ ์์ ์ฑ์ด๋ค. MainActivity.kt ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค
kenel.tistory.com
Activity์์ ViewModel์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋, ์ธ์๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ์ ์ฝ๋.
[Android] ViewModel - View์ ๊ฐ์ฒด(ViewModel) ์ ๋ฌ
#1 ๊ฐ์ #1-1 Data Binding๊ณผ ViewModel [Android] Data Binding - View์ ๊ฐ์ฒด ์ ๋ฌ #1 ๊ฐ์ฒด ์ ๋ฌ์ ํ์์ฑ #1-1 ์ด์ ๊ธ Data Binding - ๊ธฐ์ด #1 ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ ์ #1-1 ์์ ์ฑ ์๊ณผ ๊ฐ์ ๊ฐ๋จํ ์ฑ์ด ์๋ค. Button์
kenel.tistory.com
View์์ ViewModel ์์ฒด๋ฅผ ์ง์ ์ฐธ์กฐํ ์ ์๊ฒ ๋ง๋ ๋ค.
#4 LiveData
[Android] LiveData - ๊ธฐ์ด
#1 ๊ฐ์ #1-1 LiveData LiveData ๊ฐ์ | Android ๊ฐ๋ฐ์ | Android Developers LiveData๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ธ์ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. developer.android.com LiveData. ๋ฌธ์์ ์ธ ์ ์๋ Data์ ๋ณ๊ฒฝ์ ๊ด
kenel.tistory.com
LiveData๋ '๊ด์ฐฐ(observe)'์ ํตํด, ๊ทธ ๊ฐ์ด ํ์๋๋ View๋ฅผ ์๋์ผ๋ก ๊ฐฑ์ ํ ์ ์๋ค.
[Android] LiveData - ์์์ ์ผ๋ก '๊ด์ฐฐ'ํ๊ธฐ
#1 ViewModel ์์ LiveData๊ฐ ์๋ ์ํ ์ฑ [Android] ViewModel - View์ ๊ฐ์ฒด(ViewModel) ์ ๋ฌ #1 ๊ฐ์ #1-1 Data Binding๊ณผ ViewModel [Android] Data Binding - View์ ๊ฐ์ฒด ์ ๋ฌ #1 ๊ฐ์ฒด ์ ๋ฌ์ ํ์์ฑ #1-1 ์ด์ ๊ธ Data Binding -
kenel.tistory.com
LiveData์ '๊ด์ฐฐ'์ ์์์ ์ผ๋ก ์ํํด ์ฝ๋๋์ ์ค์ธ๋ค.
[Android] LiveData - ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ 3๊ฐ์ง ๋ฐฉ๋ฒ
#1 ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ #1-1 ๋จ๋ฐฉํฅ๊ณผ ์๋ฐฉํฅ ์ง๊ธ๊น์ง ํด์จ Data Binding์ ๋จ๋ฐฉํฅ(One Way) ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด์๋ค. Model ๋๋ ViewModel์์ View๋ก ๊ฐ๋ ํ๋ฆ์ผ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋๋ค. ์ญ์ ์ฑ๋ฆฝํ์ง ์
kenel.tistory.com
ViewModel์ LiveData๊ฐ ๋ณ๊ฒฝ๋์ด View์ ๊ฐฑ์ ํ ๋ ๊ทธ ๋ณํ์ ํ๋ฆ์ ViewModel → View๋ค. ์ด์ ๋ฐ๋๋ก, ์ฌ์ฉ์๊ฐ View์์ LiveData์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ด๋ฅผ ViewModel์ LiveData์ ๊ฐฑ์ ํ ์๋ ์๋ค. (View → ViewModel)
#5 ์์ฝ
MVVM ํจํด์ ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์ ์ง๊ดํํ๋ค.
'๊นจ์ ๊ฐ๋ ๐ > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Fragment์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.01.24 |
---|---|
[Android] Activity์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.01.23 |
[Android] LiveData - ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ 3๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2024.01.20 |
[Android] LiveData - ์์์ ์ผ๋ก '๊ด์ฐฐ'ํ๊ธฐ (0) | 2024.01.19 |
[Android] ViewModel - View์ ๊ฐ์ฒด(ViewModel) ์ ๋ฌ (0) | 2024.01.18 |