[Android] 아키텍처 패턴 - MVP패턴

김정현·2024년 5월 2일

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

MVP 패턴


Android에서 많이 사용되는 패턴 중 하나로 Model - View - Presenter로 애플리케이션을 구성한다.
MVP패턴의 핵심은 UI(View)와 로직(Model)을 분리하고 Presenter를 통해 상호작용을 하여 서로의 의존성을 최소화하는 것이다.

Model

  • 데이터를 저장하고 처리하는 역할
  • 데이터 관련 비즈니스 로직을 담당
  • ViewPresenter에 의존하지않고 독립적

View

  • UI를 담당
  • Presenter를 통해 데이터를 전달받아 UI에 표시
  • Model과 직접 상호작용하지 않음

Presenter

  • ModelView사이의 매개체 역할
  • 인터페이스를 통해서 ModelView를 연결
  • ViewModel간의 의존성을 낮춤

Android MVP 패턴 예제코드

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의 역할을 담당
ViewPresenter와 상호작용하여 데이터를 표시하고 사용자 입력을 전달

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")
        }
    }
}

PresenterView의 요청을 받고 Model에 접근하여 데이터를 처리하여 결과를 View에 전달

MVP 장점

  • UI로직비즈니스로직이 분리되어 코드 관리가 용이하다.
  • Presenter를 통해 ViewModel의 의존성이 낮아져 테스트가 용이하다.

MVP 단점

  • 애플리케이션이 복잡해질수록 ViewPresenter의존성이 강해지는 문제
  • MVCController처럼 Presenter비즈니스 로직이 집중되는 문제

마치며

빠르게 MVVM까지 정리를 해야겠다.. 아마 내용이 가장 많을테니깐

profile
안녕하세요 반갑습니다

0개의 댓글