Develop/Android

안드로이드 개발에서 MVVM 이 뭘까?

srcho 2020. 10. 11. 13:13

개발자는 아니지만.. 취미로 앱 개발을 시작했습니다.

안드로이드는 이제 어느정도 개발하는 게 익숙해졌네요.

저는 경영학과를 나왔고 비전공자로서 작성하는 글이니 아무래도 전공자보다는 저처럼 비전공자인데 기존 글들이 이해하기 어려운 분들이 읽어서 도움이 되었으면 하네요

 

1. MVVM

MVVM은 Model, View, ViewModel 이 세 가지 구조의 약자를 말하는 구조입니다.

수많은 설명 글이 있지만... 이제 갓 개발을 시작한 사람에게는 위 세 가지 구조도 뭔지 잘 와 닿지 않을 겁니다.

간단히 설명하자면..

 

Model - 앱을 사용하는 사용자와 앱 간에 주고받는 데이터를 수신하는 개체입니다. 즉 View에 표시할 데이터를 받아오는 클래스인 것이죠. 예를 들어 네이버에 '안드로이드'를 검색할 때 저 '안드로이드'라는 String 데이터를 받아와서 다른 처리를 하기 위해 갖고 있는 것이죠.

View - 말 그대로 화면입니다. 위 예에서는 네이버 검색 화면이 되겠죠

ViewModel - 나머지 화면도, 데이터도 아닌 계산을 처리하는 개체입니다. 위 예에서는 '안드로이드'라는 Model에서 받아온 데이터로 네이버 내부 DB에서 해당 데이터를 포함하는 검색 결과를 찾아라! 하는 기능을 담은 클래스일 것입니다.

 

2. 왜 사용하나요?

한 마디로 개발의 효율성과 유지보수의 편리성 때문입니다.

수많은 기능이 있지만 먼저 앱이 큰 경우 디자이너와 개발자가 따로 작업을 하겠죠. 예전에는 기획 - 디자인 - 개발 식의 큰 프로세스로 개발이 진행되어 비효율적인 측면이 많았습니다. 디자인이 끝나고서야 개발을 할 수 있다던가.. 중간에 수정을 하는 경우 뒷 단은 전부 다 수정을 해야 하는 경우... 등등이 있겠죠. 또한 유지보수 측면에서 본다면, 개발자나 디자이너가 바뀌는 경우 인수인계의 용이성, 자기가 맡은 부분만 파악하면 되는 편리성 등등이 생길 수 있습니다.

저는 1인 개발이라 직접 개발을 해보면 위 장점보다는 ViewModel에서 모든 로직을 처리하게 만들면, Fragment의 생명주기가 리셋되더라도 View에 표시된 데이터가 리셋되지 않는 등 장점이 많습니다. 예를 들면 한 화면에서 1+1 =2라는 데이터를 적어놓고 다른 화면에 갔다 오면 지워져 있는 경우가 있거든요.. 

 

3. 맺으며..

사실 MVVM과 여러 라이브러리를 같이 쓰는 경우 효용이 더 극대화됩니다. 예를 들어 외부 API와 데이터 통신을 하는 경우 Coroutine과 Retrofit2 LiveData 등등의 기능을 더하는 경우 훨씬 편리하게 구현이 가능합니다. 다만 이 글에서는 딱 MVVM이 무엇인가에 대해서만 쓰고 싶었습니다. 굳이 MVVM을 써야 하나요?라는 질문을 하신다면 그렇지 않다고 말씀드리고 싶습니다. 하지만 MVVM을 사용하여 개발하는 습관을 들인다면 나중에 유지보수 시 엄청난 차이를 느끼실 수 있습니다. 한눈에 전체적인 구조 파악도 쉬워지고 코드 추적이 편해지기 때문이죠.. 어렵지 않으니 한 번씩 실제로 구현해보시면 금방 익숙해질 거예요