Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- onMeasure
- LiveData
- Algorithm
- HTTP
- BOJ
- CoordinatorLayout
- View
- CustomView
- kotlin
- Navigation
- Behavior
- Coroutine
- activity
- 안드로이드
- 코틀린
- room
- hilt
- onLayout
- notification
- sqlite
- CollapsingToolbarLayout
- ViewModel
- recyclerview
- AppBarLayout
- 알고리즘
- 백준
- DataBinding
- lifecycle
- 알림
- Android
Archives
- Today
- Total
개발일지
Design Pattern in A..Z - MVP 본문
MVP
Model View Presenter로 이루어진 디자인 패턴입니다. MVC 패턴에서 View와 Controller의 강한 결합도를 해결하기 위해 나온 디자인 패턴이며, Presenter를 통해 View와 Model의 결합을 줄일 수 있습니다.
Model
MVC 패턴에서 Model과 같이 데이터를 처리에 관한 로직을 담당합니다. 또한 View, Presenter와 독립적입니다.
class Model {
fun saveData(data: Int) {
// Do Something
}
}
View
사용자와 인터렉션을 담당하며 MVC 패턴에서 View와 비슷합니다. 사용자한테 입력을 받고 프레젠터에게 전달한다. 또한 Presenter가 Model에서 데이터를 불러와 가공하여 View에게 전달합니다.
View는 Presenter에게 의존적입니다.
class View {
private val presenter = Presenter(this)
fun executeUserEvent() {
presenter.sum(1, 2)
}
fun show(data: Int) {
println(data)
}
}
Presenter
MVC패턴에서 Controller와 비슷하지만 View와 직접적으로 연결된 것이 아닌, Interface를 사용하여 연결합니다.
View와 Model사이에서 데이터를 가공하여 전달하는 역할을 합니다.
class Presenter(
private val view: View
) : MainPresenter {
private val model = Model()
override fun sum(n1: Int, n2: Int) {
val data = n1 + n2
model.saveData(data)
view.show(data)
}
}
interface MainPresenter {
fun sum(n1: Int, n2: Int)
}
특징
View와 Presenter는 1:1 관계입니다.
장단점
View와 Presenter를 인터페이스로 연결하여 결합을 최소화 했고 View와 Model의 의존을 없앨 수 있습니다. 가상의 View를 사용하여 모듈 형식으로 테스트를 진행할 수 있습니다. 하지만 여전히 연결 관계가 있으며, View, Model, Presenter, Interface 구현해야 할 클래스가 많아 프로젝트가 커지면 Presenter의 크기가 커지는 단점이 있습니다.
'Design Pattern (디자인 패턴)' 카테고리의 다른 글
Design Pattern in A..Z - Command (0) | 2021.10.05 |
---|---|
Design Pattern in A..Z - MVVM (0) | 2021.10.05 |
Design Pattern in A..Z - MVC (0) | 2021.10.05 |
Design Pattern in A..Z - Singleton (싱글톤) (0) | 2021.10.04 |
Comments