๐กMVP ํจํด์์ DataBinding์ ํ์ฉํ ์๋ฐฉํฅ DataBinding ๋ํด ์ ๋ฆฌํ์์ต๋๋ค!
MVP with DataBinding
- MVP ํจํด์ ์๋๋ก์ด๋์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ํคํ ์ฒ ํจํด ์ค ํ๋๋ก, UI ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ์ ์ง๋ณด์์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ๋์ ๋๋ค.
- DataBinding์ ํจ๊ป ์ฌ์ฉํ๋ฉด UI์ ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํ ์ ์์ผ๋ฉฐ, ์ฝ๋๋ ๊ฐ์์ ์ง๊ด์ ์ธ UI ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
MVP์์ DataBinding์ ์ฌ์ฉํ๋ ์ด์
์ฝ๋ ๊ฐ๊ฒฐํ
- findViewById()๋ฅผ ํตํ UI ํ์์ด ์๋ DataBinding์ ํตํด XML ๋ ์ด์์ ํ์ผ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด UI ์์์์ ์ํธ์์ฉ์ ๋ ์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
- MVP ํจํด์์ View๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ UI๋ฅผ ์ ๋ฐ์ดํธ ํฉ๋๋ค.
- DataBinding์ ์ฌ์ฉํด์ UI์์์ ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ ์ ์์ด์ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด UI๊ฐ ์๋์ผ๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
View์ Presenter ์์กด์ฑ ๋ถ๋ฆฌ
- View์ Presenter๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ ํ๊ฒฝ์์ View์ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- Presenter๊ฐ ์ง์ UI์ ์ ๊ทผํ์ง ์๊ณ , DataBinding์ ํตํด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๊ฒ ํฉ๋๋ค.
MVP ๊ตฌํ
- ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ User Model์ MVP ํจํด์์ xml๊ณผ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ ์ฉํ๋ ค ํฉ๋๋ค.
data class User(val name: String, val age: Int)
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.app.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/nameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<TextView
android:id="@+id/ageTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Integer.toString(user.age)}" />
</LinearLayout>
</layout>
DataBinding
- Activity๋ Prsenter๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๊ทธ ๋ฐ์ดํฐ๋ฅผ DataBinding์ ํตํด UI์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
- Presenter๋ Model์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ View์ ์ ๋ฌํ๋ ๊ตฌ์กฐ๋ก, View๋ DataBinding์ ํตํด XML ๋ ์ด์์๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ UI๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํฉ๋๋ค.
class MainActivity : AppCompatActivity(), MainContract.View {
private lateinit var binding: ActivityMainBinding
private lateinit var presenter: MainPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// DataBinding ์ด๊ธฐํ
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// Presenter ์ด๊ธฐํ
presenter = MainPresenter(this)
// Presenter์๊ฒ ๋ฐ์ดํฐ ์์ฒญ
presenter.loadUserData()
}
// Presenter๋ก๋ถํฐ ๋ฐ์ดํฐ ๋ฐ์์ UI ์
๋ฐ์ดํธ
override fun displayUser(user: User) {
binding.user = user // XML์ ์๋ user ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ
}
override fun showError(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
}
- ์๋ฐฉํฅ ์ ๋ฐ์ดํธ๋ฅผ ํ์ฉํ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ๊ฐ๊ฒฐํ๊ณ ์ ์ง๋ณด์์๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์ด๋ก ์ธํด UI ์ฝ๋์ ์์ ์ค์ด๊ณ , ๋ฐ์ดํฐ์ UI ๊ฐ์ ์ํธ์์ฉ์ ๋ ์ง๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
DataBinding์์ MVVM๊ณผ MVP
- MVVM ํจํด์์๋ ViewModel์ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋๊ธฐํํ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ธ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ํ ๊ด๋ฆฌ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ก ์ข ๋ ์๋ฐฉํฅ์ ์ ํฉํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ ์ ์์ต๋๋ค.
- MVP ํจํด์์๋ LiveData๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง, ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
class MainActivity : AppCompatActivity(), MainContract.View {
private lateinit var presenter: MainPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
presenter = MainPresenter(DataRepository())
// LiveData ๊ด์ฐฐ
presenter.userData.observe(this, Observer { user ->
// ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ UI ์
๋ฐ์ดํธ
updateUI(user)
})
presenter.loadUserData()
}
override fun updateUI(user: User) {
// UI ์
๋ฐ์ดํธ ์ฝ๋
textViewName.text = user.name
}
}
- ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํด์ View๋ฅผ ์ ๋ฐ์ดํธํ๋๋ฐ, interface๋ฅผ ์์๋ฐ์ presenter์์ ๋์์ ์ํํ๋ ๊ฒ์ด ์๋, activity์์ updateUi ํจ์๋ฅผ ํธ์ถํ๊ณ ์์ต๋๋ค.
- ์ด ๋๋ฌธ์ Presenter๊ฐ UI์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ , ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์๋ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- LiveData ์ฌ์ฉ์ MVVM์ ๋ ์ ์ด์ธ๋ฆฌ๋ฉฐ, MVP์์ ์ฌ์ฉํ๋ค๋ฉด Prsenter์ ์ญํ ์ด ๋ชจํธํด์ง ์ ์์ต๋๋ค.
์ ๋ฆฌ
- MVPํจํด์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํ์ฉํด์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ง๋ง ๋ผ์ด๋ธ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ด์ ์ ์ด๋ฆฌ๊ธฐ ์ํด์๋ MVVM ํจํด์ด ๋ ์ ์ฉํฉ๋๋ค.
- ํ๋ก์ ํธ์ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ์ ํฉํ ์ํคํ ์ฒ ํจํด์ ์ฌ์ฉํ๋ค๋ฉด ์ ๋์ ์ธ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค.