일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인 패턴 예제
- 객체지향 프로그래밍 5가지 원칙
- Kotlin
- AAC
- 안드로이드 스튜디오 style
- java
- 이중for문 사용 안하기
- 아파치 엔진엑스
- apache란
- apache nginx
- recyclerview item recycle
- Thread
- 안드로이드 스튜디오 인터넷 연결 안되어 있을 때
- java thread 예제
- 안드로이드 스튜디오 인터넷 연결 확인
- LifeCycle
- 안드로이드 스튜디오 커스텀 다이얼로그
- 자바 스레드 예제
- hilt error
- savedinstancestate
- 안드로이드 디자인패턴
- 아파치란
- 안드로이드 스튜디오 반복되는 레이아웃 코드
- 변수
- dagger error
- 리사이클러뷰 아이템 재사용
- 안드로이드 스튜디오 tts
- 다른 객체 리스트의 비교
- 안드로이드 스튜디오 custom dialog
- edittext 연결
- Today
- Total
Sam Story
안드로이드 MVP 패턴 본문
오늘은 지난번 포스팅에 이어 안드로이드 디자인 패턴중에 하나인
MVP 패턴에 대해 포스팅 해보려 한다.
그 전에 포스팅한 MVC 패턴에 대해 궁금하다면 글 최하단의 포스팅을 참고하도록 하자.
1. MVP 디자인 패턴이란?
MVP 패턴은 Model + View + Presenter 세가지 구성요소의 앞글자를 따온 패턴이다.
세가지 구성요소에 대해 간단하게 설명하면
1. Model
- 데이터와 비즈니스 로직을 주로 관리한다
- Presenter에게 명령을 전달 받고 데이터의 상태를 변경시킨다.
- 데이터의 상태가 변경되면 Presenter에게 알린다.
2. View
- View , Layout 등 화면을 처리하는 곳
(안드로이드의 경우 Activity , Fragment 에 해당)
- 사용자 입력을 받고 Presenter에게 알린다.
- 업데이트 될 데이터를 Presenter 로부터 전달 받는다.
3. Presenter
- View와 Model 사이에서 데이터를 전달하는 역할을 한다.
간단하게 위 요소들이 어떤 흐름으로 동작하는지 그림을 통해 알아보자.
위그림의 흐름처럼 작동하는걸 한눈에 볼 수 있다.
2. MVP 패턴의 특징
- Presenter와 View는 1:1 관계다.
● Presenter와 View는 각각의 다른 형태로 존재하기 때문에
- View와 Model은 서로의 존재를 알 필요가 전혀 없다.
● View는 Presenter를 통해 응답을 받기 때문에 Model의 존재를 알 필요가 없다.
3. 예제
오늘 준비한 예제는 지난번 MVC 패턴에서 사용한 예제와 같은 예제 이지만
MVP 패턴으로 코드를 작성했다.
Model
package com.example.designpattern_mvp_example
import kotlin.random.Random
class Model {
var name = ""
fun randomName(): String {
when(Random.nextInt(6)){
0 -> name = "Human"
1 -> name = "Harry"
2 -> name = "Stella"
3 -> name = "Hyun"
4 -> name = "Lion"
5 -> name = "Jin"
}
return name
}
}
Model 클래스의 경우 지난번 MVC 패턴과 동일한걸 알 수 있다.
Presenter
package com.example.designpattern_mvp_example
class Presenter {
// model 객체를 초기화
private val model = Model()
fun result(): String {
// result 메서드를 통해 model.randomName()의 반환값을 반환 해준다.
return model.randomName()
}
}
Presenter 클래스에서 model을 초기화 해주고 model의 메서드를 호출해서 받은 반환값을 다시 반환해준다.
메인 액티비티
package com.example.designpattern_mvp_example
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity() {
lateinit var presenter: Presenter
lateinit var textView: TextView
lateinit var button: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
button = findViewById(R.id.button)
// 프레젠터 객체 초기화
presenter = Presenter()
button.setOnClickListener {
// presenter의 result 메서드 호출 후 반환값을 textView의 text로 초기화 해준다.
textView.text = presenter.result()
}
}
}
메인 액티비티 에서는 presenter만 초기화 하고 presenter의 메서드를 호출한다.
실행 결과
위와 같은 실행결과를 볼 수 있다.
4. MVP 패턴의 장점과 단점
장점
- View와 Model의 의존성이 없다. ( Presentor가 중개자 역할 )
- 따라서 MVC의 일부 단점 해결
단점
- 프로젝트 규모가 커질수록 Presenter가 무거워진다.
- View와 Presenter의 1:1 관계로 인해 의존성 증가
이렇게 오늘은 MVP 패턴에 대해 알아보았다.
MVC 패턴의 문제인 Model과 Controller,View 의 의존성을 없애고
Presenter가 중개자 역할을 함으로써 MVC 패턴의 단점을 보완한 디자인 패턴이
MVP 패턴이라고 생각한다.
MVC 패턴이 익숙해졌다면 간단한 프로젝트는 MVP 패턴으로 구성해보는것도 좋다고 생각한다.

MVC 패턴 포스팅
안드로이드 MVC 패턴
오늘은 안드로이드 디자인 패턴중에 하나인 MVC 패턴에 대해 포스팅 해보려 한다. 디자인 패턴에 관한 내용은 하단 링크에 정리해놓은 포스팅이 있으니기본적인 내용은 생략하도록 하겠다 디
samtistory.tistory.com
오늘 예제 깃허브 주소
GitHub - nam-su/MVPPatternExample
Contribute to nam-su/MVPPatternExample development by creating an account on GitHub.
github.com
'Android' 카테고리의 다른 글
핸들러 (Handler) (0) | 2024.05.13 |
---|---|
안드로이드 MVVM 패턴 (0) | 2024.04.30 |
안드로이드 MVC 패턴 (0) | 2024.04.27 |
안드로이드 ConstraintLayout (2) | 2024.04.25 |
제트팩 컴포즈 (Jetpack Compose) (1) | 2024.04.21 |