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

데이터의 변경이 없어도 뷰모델을 사용하는것이 좋나요?

0 추천
미숙하지만 MVVM 디자인패턴으로 시도를 해보고있는데요..(아직 적용한건 하나도 없지만.)

바텀 네비게이션을 사용하고 있고.. 3개의 메뉴로 구성되어있습니다.

이 바텀 네비게이션은 액티비티(메인)에 구성되어있고..여기서 각 메뉴 프래그먼트들로 이동합니다.

여기서 A라는 바텀메뉴 프래그먼트로 이동을한 후 A프래그먼트에서 다이얼로그 창을 띄운후

어떤 옵션을 다시 선택해서 데이터전달과 함께 B라는 프래그먼트로 변경을 할 예정인데요

(바텀메뉴간의 전환이 아니라 A라는 바텀메뉴의 프래그먼트에서 다른 프래그먼트로 화면 전환입니다!)

 

여기서 데이터전달을 고민하고있는중인데, 가장 널리? 알려진방법은 이제 A프래그먼트에서 인터페이스를

정의하고 액티비티에서 구현을 한후 이 구현 메소드에서 프래그먼트 전환 코드와 함께 newInstance를 통해

데이터를 전달하는 방법을 사용할까 했는데

 

보니 ViewModel을 통한 데이터 전달 방법도 있더라구요.

액티비티의 뷰모델 클래스를 구현하고 프래그먼트들에서 뷰모델 객체를 생성해서 통신?을하더라구요

그런데 제가 알기론 뷰모델하면 , 라이브데이터와 함께사용되던데 라이브 데이터는 뷰의

데이터 변환를 관찰해서 실시간으로 변경해주던데요, 저는 화면전환할때 데이터를 전달만할뿐

변경사항은 없습니다.그런데도 사용해도 될까요?

 

MVVM 디자인 패턴에 더 적합할까요..?

 

글 이해가 가셨을런지 모르곘네요
codeslave (3,940 포인트) 님이 2021년 5월 22일 질문

1개의 답변

0 추천
바로 아래 질문에 관련된 내용이 있네요.

https://www.masterqna.com/android/97638/%EC%B5%9C%EA%B7%BC%EC%97%90-fragment%EC%97%90%EC%84%9C-newinstance%EB%A5%BC-%EC%82%AC%EC%9A%A9-%EC%95%88%ED%95%98%EB%82%98%EC%9A%94

(개인적으로는 아직 setArgument를 직접 호출해야할 상황이 있기 때문에  newInstance가 필요한 경우가 있다고 보이긴 하지만요.)

제 생각으로는 ViewModel을 공유할 수도 있으나, 사용해 본 결과로는 ViewModel이 아주 작다면 상관없겠지만, 사이즈가 좀 커지면 코드를 읽는데 헷갈릴 수도 있습니다.  구글 개발자가 권장하는 것도 화면 하나당 하나의 뷰모델이라고 구글 IO에서 말을 한 적이 있는데요. (최근 구글에서 내놓은 라이브러리들을 상당수가 미성숙된 것들이 많아서 믿고 쓰기가 좀 힘들다는게 1년반 이상 새프로젝트에서 사용해 본 개인적인 경험입니다.)

하지만 두방법다 큰 문제는 없을 것 같고 다만 전달하는 데이터의 사이즈가 크다면 Fragment에 직접 전달하시는 방법은 제대로 동작하지 않을 수도 있습니다.
spark (224,800 포인트) 님이 2021년 5월 22일 답변
감사합니다... 어차피 MVVM하면서 ViewModel을 접할꺼.. 이왕 미리 접해보겠습니다
선생님 그런데 뷰모델을 이용해서 프래그먼트간 데이터 전달을 하지않고,
평시처럼 인터페이스를 사용해서 액티비티를 통해 서로 데이터를 주고받는다면,
이게 MVVM 디자인패턴에 어긋나고 그런건 없나요?
MVVM 패턴에 ViewModel 을 쉐어한다거나 데이터를 상호전달하는 개념은 없습니다. 그건 안드로이드 ViewModel 이라서 있는 기능입니다. 엄밀히 말하면 안드로이드 ViewModel은 안드로이드에서만 쓸 수 있는 ViewModel입니다. 개인적으로는 좀 더 유연하고 나은 코드는 가능한 특정 플랫폼에 종속적이지 않는 것이라고 생각합니다. 이런 관점으로 본다면 Android ViewModel 자체도 안쓸 수 있다면 안쓰는게 낫겠죠. 사실 Observer 패턴만 구현할 수 있고 Configuration Change나 Process death 등을 대비해 데이터를 저장하고 복구하는 부분만 해결할 수 있다면 Android ViewModel은 없어도 됩니다. Observer pattern의 구현은 생각만큼 복잡하지 않습니다. 데이터를 복구하는 부분은 좀더 고려해야할 게 많긴 하지만요.
그러니까 간단히 말해서 MVVM에서의 뷰모델과 안드로이드에서의 뷰모댈을 구분해서 보라는 말씀이시죠? AAC라고 안드로이드 아키텍쳐였나..거기에 뷰모델 데이터바인딩 라이브데이터였나 이렇게있었는데 이게 mvvm을 구현하는데 편할것이라고 해서 mvvm 패턴을 구현하는데 이왕 안드로이드 뷰모델도 사용하면 데이터전달도 하면 겸사겸사니까 좋지않을까 생각했습니다
...