안녕하세요, 저는 MVVM 패턴으로 개발 중에 있습니다.
실 개발을 하다보니 Model의 역할에 대해 이해가 되지 않아 질문을 남기게 되었습니다.
일단 제가 안드로이드 내에서 MVVM패턴에 대해 이해한 바는 다음과 같습니다.
View는 디스플레이로 보여지기 위한 작업을 수행하고,
ViewModel은 View에서 보여지기 위한 데이터를 Model로 붙어 가공하는 작업을 하거나 View단으로부터 받은 데이터를 Model로 전달하는 중간다리 역할을 합니다.
Model은 뷰모델로부터 받은 데이터를 저장하고 요청에 따라 이 데이터를 반환합니다.
그렇다면 Model이 데이터를 어떻게 가지고 있어야 하는지, 모델의 역할에 대해 궁금증이 생겼습니다.
예를 들어,
1. 유저 정보를 저장할 데이터 클래스를 만듭니다. -> Model
(ex. data class User (.var name: String, var age: Int ... ))
2. 유저에게 정보 입력을 받습니다. -> View
3. 입력받은 각각의 유저 정보를 취합합니다. -> ViewModel
private var _user = MutableLiveData<User>()
val user: LiveData<User> get() = _user
fun saveName(name: String){
val oldUser = _user.value ?: return
oldUser.name = name
_user.postValue(oldUser)
}
fun saveAge(age: Int){
...
}
이제 취합한 데이터를 Model에게 전달 해주어야 각자의 역할을 하게 되는데 어디에 저장해야하는지... 모르겠습니다.
해결책으로 생각한 것은
1. MainActivity에 인스턴스 생성하여 저장 -> 그럼 뷰에서 데이터를 가지고 있게 되는 셈이라 굳이 뷰모델의 역할이 나뉜 이유가 없어지기 때문에 의미 없는 행동이라고 생각합니다.
2. 뷰모델을 싱글톤으로 생성하고 주입하는 방법 -> 하지만 이렇게 되면 ViewModel이 데이터를 갖고 있게 되는 셈 아닐까 싶습니다.
3. sharedViewModel을 이용하여 프래그먼트에서 뷰모델의 데이터를 공유하는 방법 -> 싱글톤과 유사하게 사실상 뷰모델이 데이터를 가지게 됩니다.
4. 전역변수로 데이터클래스의 인스턴스를 만들고 뷰모델이 onCleared될 때 값을 전달해주는 것 -> 큰 데이터의 경우 메모리에 부담이 될 것 같습니다.
결론적으로 데이터를 저장한다는 Model이 구체적이지 않은 느낌이 듭니다. View나 ViewModel은 해당 클래스 파일이 있는 반면, Model은 데이터 클래스를 제외하고는 어떻게 다루어야 하는지 감이 잡히지 않습니다.
MVVM 패턴을 사용할 경우 어떤 방법으로 데이터를 저장해야하는지 도움 부탁드립니다.