오늘은 저번에 썼던 MVC패턴에 이어서 MVP패턴에 대해서 포스팅하려고 한다. 원래는 더 빨리 글을 써야했는데 기술 면접 준비도 하고 이력서도 쓰고 하느라 시간이 조금 지체됐다..

Android에서 많이 사용되는 패턴 중 하나로 Model - View - Presenter로 애플리케이션을 구성한다.
MVP패턴의 핵심은 UI(View)와 로직(Model)을 분리하고 Presenter를 통해 상호작용을 하여 서로의 의존성을 최소화하는 것이다.
View와 Presenter에 의존하지않고 독립적Presenter를 통해 데이터를 전달받아 UI에 표시Model과 직접 상호작용하지 않음Model과 View사이의 매개체 역할Model과 View를 연결View와 Model간의 의존성을 낮춤class UserModel(
var name: String,
var email: String
)
사용자 정보를 저장하고 관리하는 Model 클래스
class MainActivity : AppCompatActivity(), MainView {
private lateinit var presenter: MainPresenter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
presenter = MainPresenter(this)
presenter.loadUserInfo()
}
override fun showUserInfo(user: UserModel) {
// Update UI with user information
nameTextView.text = user.name
emailTextView.text = user.email
}
override fun showError(message: String) {
// Display error message to the user
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
interface MainView {
fun showUserInfo(user: UserModel)
fun showError(message: String)
}
}
Activity클래스가 View의 역할을 담당
View는 Presenter와 상호작용하여 데이터를 표시하고 사용자 입력을 전달
class MainPresenter(private val view: MainView) {
fun loadUserInfo() {
try {
val user = UserModel("John Doe", "john.doe@example.com")
view.showUserInfo(user)
} catch (e: Exception) {
view.showError("Failed to load user information")
}
}
}
Presenter는 View의 요청을 받고 Model에 접근하여 데이터를 처리하여 결과를 View에 전달
Presenter를 통해 View와 Model의 의존성이 낮아져 테스트가 용이하다.View와 Presenter의 의존성이 강해지는 문제MVC의 Controller처럼 Presenter에 비즈니스 로직이 집중되는 문제빠르게 MVVM까지 정리를 해야겠다.. 아마 내용이 가장 많을테니깐