안드로이드 MVVM Architecture를 알아보자

이영한·2021년 9월 3일
10

앱 아키텍쳐

목록 보기
1/4

1. 앱 아키텍쳐의 필요성

안드로이드 앱 개발에서 앱 아키텍쳐 구조는 매우 중요합니다. 왜냐하면 아래와 같은 장점이 있기 때문입니다.

  1. 모바일이라는 특수한 환경
    모바일 환경에서는 화면 회전과 같이 PC에서라면 발생하지 않을 여러 상황이 있습니다. 올바른 아키텍쳐 구조는 이러한 상황에서 사용자가 불편을 느끼지 않고 유연히 사용할 수 있도록 합니다.

  2. 테스트 가능
    안드로이드 앱 개발을 할 때 jUnit을 많이 사용합니다. 그러나 이때 Activity와 Fragmet는 jUnit을 통한 테스트가 불가능합니다. 따라서 이런 테스트 불가능한 클래스에 코드가 몰리는 상황을 아키텍쳐 설계를 통해 방지해야 합니다.

  3. 관심사 분리
    컴포넌트 별로 역할이 분리됩니다. 하나의 컴포넌트가 많은 역할을 담당하여 지나치게 커지는 상황을 방지할 수 있습니다

  4. 유지 보수가 용이
    아키텍쳐가 잘못 설계되었다면 유지 보수 작업이 무척 고통스러워집니다. 왜냐하면 컴포넌트 간에 의존성이 얽혀서 하나의 수정사항이 다른 컴포넌트들에 어떤 영향을 미칠지 예상할 수 없게 되기 때문입니다. 올바른 아키텍쳐 구조를 따르면 이러한 문제점을 미리 막을 수 있습니다.


2. MVVM 아키텍쳐

안드로이드 앱 개발에서는 보통 MVVM을 널리 사용합니다. MVVM이란 아래 세 개 컴포넌트의 이름을 따서 지었습니다.

  1. Model : 앱에서 핵심적인 데이터 모델입니다. 예를 들어 노트앱을 만든다고 하면 노트의 이름, 노트 내용, 작성 시간등이 담긴 데이터 클래스가 되겠습니다.

  2. View : 사용자에게 보여지고 사용자의 입력이 들어오는 부분입니다. 일반적으로 Activity, Fragment에 해당합니다

  3. View Model : View에 보여질 데이터를 가지고 있는 클래스 입니다. 데이터를 받아오고 저장하는 작업을 시작합니다.


안드로이드 공식 문서에서는 앱에 어울리는 아키텍쳐 구조를 제안하고 있습니다. 전체적인 모습은 아래와 같습니다.

그래프를 보면 설명드린 MVVM 말고도 여러가지 컴포넌트가 추가되었습니다. 하지만 기본 구조 자체는 MVVM입니다. 하나씩 살펴봅시다.

  • Activity / Fragment : MVVM에서 View에 해당합니다.

  • ViewModel : 이름 그대로 ViewModel에 해당하는 부분입니다. LiveData는 observable한 클래스로 ViewModel의 데이터를 View에 옵저버 패턴으로 전달하기 위해 사용합니다.

  • Repository : 데이터 저장, 네트워크 등의 작업을 viewModel에서 모두 진행한다면 너무 컴포넌트가 커질 것입니다. 따라서 이를 분리하여 Repsoitory가 담당합니다.

  • Model : MVVM의 Model에 해당합니다. Room은 데이터 저장을 쉽게 도와주는 라이브러리 입니다.

  • Remote Data Source : 네트워크와 관련된 부분입니다. Retrofit은 네트워크를 쉽게 도와주는 라이브러리 입니다.


즉 안드로이드에서 공식적으로 권장하는 아키텍쳐는 MVVM 패턴에 Repository가 추가된 형태라고 볼 수 있습니다. 또한 구조를 보면 하나의 컴포넌트에 해야할 일을 몰아넣지 않고 여러 컴포넌트로 쪼갰음을 알 수 있습니다.


[참고자료]
https://developer.android.com/jetpack/guide?hl=ko
https://dev.to/adammc331/mvwtf-demystifying-architecture-patterns-ap1

profile
간단하게 개발하고 싶습니다

0개의 댓글