마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MVVM 개발중 Model의 역할 중 하나가 데이터를 저장하는 것인데 이해하기 어렵습니다.

0 추천

안녕하세요, 저는 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 패턴을 사용할 경우 어떤 방법으로 데이터를 저장해야하는지 도움 부탁드립니다.

하루도쉬운날이없어 (190 포인트) 님이 2024년 7월 18일 질문
하루도쉬운날이없어님이 2024년 7월 18일 수정

1개의 답변

+1 추천
 
채택된 답변
MVx(MVC, MVP, MVVM) 패턴에서 M(Model)은 앱에서 필요한 데이터를 가져와(DB, Remote API등) 비지니스의 요구사항에 따른 로직을 처리하는 역할을 한다고 보시면 됩니다.

님의 예를 들면,
ViewModel에서는 화면에서 입력받은 데이터를 보관한고 있다가 사용자 정보를 저장할 때 Model에게 해당 데이터를 저장하도록 하면 됩니다. 이 때 사용자 정보의 유효성을 체크할 수도 있겠고 DB나 서버 등 비지니스 요구사항에 맞게 데이터를 저장하면 됩니다.
ViewModel는 뷰레이어에 해당하기 때문에 싱글톤을 사용하지 않습니다. 만약 입력받을 데이터가 여러 화면에서 들어오는 경우라면 ViewModel을 쉐어하던가 메모리 같은 임시저장소나 액티비티의 번들같은 곳에 저장할 수도 있고  구현방법과 아이디어에 따라 다양한 방법이 존재할 수 있습니다.

이 패턴들은 단지 추상적인 개념만 제공할 뿐 실제 구현은 개발자의 몫이기 때문에, 이걸 이해하는 관점에 따라 다르게 구현이 될 수 있고 하나의 정답이 존재하지 않습니다.
spark (230,170 포인트) 님이 2024년 7월 18일 답변
하루도쉬운날이없어님이 2024년 7월 19일 채택됨
정확하게 궁금했던 부분을 알려주셨습니다
감사합니다!
...