본문 바로가기
Android

안드로이드 mvp,mvvm 패턴과 샘플코드

by kkong93 2023. 3. 9.
반응형

안드로이드 앱 개발에서 MVVM 및 MVP 패턴은 모두 많이 사용되는 아키텍처 패턴이다. 이러한 패턴은 코드를 구조화하고 관리하며 테스트하기 쉽게 만들어 준다.

반응형

MVVM 패턴

MVVM 패턴은 Model-View-ViewModel의 약자이다. 이 패턴은 UI 레이어와 비즈니스 로직 사이에 중간 계층을 추가하는 패턴이다. MVVM 패턴의 주요 요소

  • Model: 데이터와 비즈니스 로직을 포함하는 계층
  • View: UI를 담당하는 계층
  • ViewModel: 비즈니스 로직과 UI를 연결하는 계층

ViewModel은 View에 필요한 데이터를 가져와서 View에 전달한다. View는 ViewModel의 데이터를 사용하여 UI를 업데이트한다. View는 ViewModel에 명령을 보내고 ViewModel은 Model에 명령을 보내어 데이터를 업데이트한다.

MVVM 패턴은 Android에서 사용하기에 매우 적합한 패턴입니다. Android의 LiveData 및 Data Binding 라이브러리를 사용하여 MVVM 패턴을 구현할 수 있습니다.

// Model
data class User(val id: Int, val name: String, val age: Int)

// ViewModel
class UserViewModel : ViewModel() {
    private val _user = MutableLiveData<User>()
    val user: LiveData<User> = _user

    fun fetchUser(id: Int) {
        val user = // fetch user from database or network
        _user.value = user
    }
}

// View
class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private val viewModel by viewModels<UserViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        viewModel.user.observe(this, { user ->
            // update UI with user data
        })

        binding.button.setOnClickListener {
            viewModel.fetchUser(1)
        }
    }
}

 

 

MVP패턴

MVP 패턴은 MVC 패턴에서 파생된 패턴으로, Model, View, Presenter 세 가지 요소로 구성된다. MVP 패턴은 다음과 같은 특징이 있다.

  • Model: 데이터와 비즈니스 로직을 담당
  • View: 사용자 인터페이스를 담당
  • Presenter: View와 Model 간의 통신을 담당하며, View를 업데이트한다.

Presenter는 View와 Model 간의 중간 매개체로, View의 사용자 입력을 Model로 전달하고, Model에서 반환된 데이터를 View로 전달한다. 이 때, Presenter는 View와 Model의 결합도를 낮추어 유지보수를 쉽게 만들어준다.

// Model
data class User(val id: Int, val name: String, val age: Int)

// View
interface UserView {
    fun showUser(user: User)
}

class MainActivity : AppCompatActivity(), UserView {
    private lateinit var presenter: UserPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        presenter = UserPresenter(this)
        presenter.fetchUser(1)
    }

    override fun showUser(user: User) {
        // update UI with user data
    }
}

// Presenter
class UserPresenter(private val view: UserView) {
    fun fetchUser(id: Int) {
        val user = // fetch user from database or network
        view.showUser(user)
    }
}

 

MVP 패턴과 MVVM 패턴의 가장 큰 차이점은 데이터 바인딩이다. MVVM 패턴은 데이터 바인딩 라이브러리를 이용해 View와 ViewModel을 바인딩하고, 이를 통해 UI를 업데이트를 한다. 반면, MVP 패턴은 View와 Presenter 간의 상호작용을 코드로 구현한다.

또한, MVP 패턴은 View와 Presenter를 분리함으로써 View를 가볍게 만들어 테스트하기 쉽게 만든다. 반면, MVVM 패턴은 View와 ViewModel 사이의 상호작용을 강력하게 바인딩하고, 이를 통해 UI 업데이트를 수행합니다. 이 때문에 MVVM 패턴은 테스트하기 어려울 수 있다.

MVVM 패턴은 최근 안드로이드 개발에서 더 많이 사용되고 있으며, 구글에서도 권장하고 있다. 하지만, 개발자들은 상황에 따라 MVP 패턴을 선택하기도 한다. 이는 개발자의 개인적인 취향이나 프로젝트의 요구사항 등에 따라 달라질 수 있다.

 

반응형

'Android' 카테고리의 다른 글

Recommend 10 sites to help developers  (0) 2023.04.07
Kotlin 널 안전성이란  (0) 2023.04.03
개발자가 되는법  (0) 2023.02.05
안드로이드 발전과정  (0) 2023.02.05
Android Https body 통신 로그 보기  (0) 2022.10.27

댓글