MVP ํจํด
MVC ํจํด์ด ๋ญ์ง ๋ชจ๋ฅธ๋ค๋ฉด ๋จผ์ ์ด ๊ธ์ ๋ณด๊ณ ์ค์!
https://ku-hug.tistory.com/187
Model, View, Presenter์ ์ฝ์
Model
MVC์ Model๊ณผ ๋์ผ
View
MVC์ View + MVC์ Controller (= xml ํ์ผ๊ณผ Fragment, Activity ํ์ผ)
์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๊ณ ์ด๋ฒคํธ๋ฅผ Presenter๋ก ์ ๋ฌ
Presenter
Controller๊ณผ ๊ฐ์ ์ญํ
View์ ์ฐ๊ฒฐ๋๋ ๊ฒ์ด ์๋, ๋จ์ ์ธํฐํ์ด์ค
View์๊ฒ ํ์ํ ๋ด์ฉ๋ง ์ ๋ฌ
MVP์ ์ด์
- MVC์ ๋นํด ๊น๋ํ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
- View ์ธํฐํ์ด์ค ๊ตฌํ ์, ์ด๋ค View์๋ ์์ ๊ฐ๋ฅ -> Presenter ๋ก์ง์ ์ฝ๊ฒ ํ ์คํธ ๊ฐ๋ฅ
MVP์ ๋จ์
- ๋ง์ ์ฝ๋๊ฐ Presenter์ ๋ชจ์ด๊ฒ ๋จ -> ์ ์ง๋ณด์๊ฐ ์ด๋ ค์
์ค์ต
์ซ์๋ฅผ ํด๋ฆญํ๋ฉด ์ปค์ง๋ ์ฑ์ MVP๋ก ๋ง๋ค์ด๋ณด์!
(์๋๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์ ๋ถ๋ถ์ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํ์ง๋ง, ๊ฐ๋จํ ์์์ด๋ฏ๋ก ์๋ตํ์ต๋๋ค.)
1. ์ฌ์ฉ์๊ฐ ์ซ์๋ฅผ ํด๋ฆญ
- view์์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ์
- ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ Presenter๋ก ์ ๋ฌ
2. ํ์ฌ ์ซ์ + 1์ ๊ฐ์ ธ์จ๋ค.
- Presenter๊ฐ Model์ ๋ฐ์ดํฐ ์์ฒญ
- Model์ด Presenter์ ์์ฒญํ ๋ฐ์ดํฐ ์ ๋ฌ
- Presenter๊ฐ Model์์ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ ์ ์
- Presenter๊ฐ Model์์ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ View๋ก ์ ๋ฌ
3. View์์ ์ ๋ฌ ๋ฐ์ ๋ฐ์ดํฐ ๋ฐ์
์ธ๋ถ ์ฝ๋
1. Model ์์ฑ
object Model {
fun clicked(string: String): String {
return "${string.toInt() + 1}"
}
}
2. Presenter ์์ฑ
interface Presenter {
fun takeView(view: View)
fun confirm(string: String)
interface View {
fun changeText(string: String)
}
}
3. Presenter ๊ตฌํ ๋ถ๋ถ ์์ฑ
class PresenterImpl : Presenter {
private var view: Presenter.View? = null
override fun takeView(view: Presenter.View) {
this.view = view
}
override fun confirm(string: String) {
view?.changeText(Model.clicked(string))
}
}
4. View ๊ตฌํ
class MainActivity : AppCompatActivity(), Presenter.View {
lateinit var presenter: Presenter
lateinit var number: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
presenter = PresenterImpl()
presenter.takeView(this)
number = findViewById(R.id.number)
number.setOnClickListener {
presenter.confirm(number.text.toString())
}
}
override fun changeText(string: String) {
number.text = string
}
}
์ ์ฒด ์ฝ๋
https://github.com/koownij/mvpExample
์ฐธ๊ณ ์๋ฃ
https://blog.crazzero.com/m/152
https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/