본문 바로가기
안드로이드(kotlin)

안드로이드 MVVM 아키텍처란 무엇인가 필요성과 그 배경

by 기계공학 주인장 2023. 3. 17.
반응형

안드로이드 MVVM 아키텍처

  • MVC vs MVP vs MVVM 비교
  • MVVM의 탄생 이유 및 필요성
  • MVVM 구현 방법


MVC : View와 Controller를 Activity, Fragment에서 담당

MVC 패턴의 경우 그림과 같이 View와 Controller가 연결되어 있습니다.

즉, Controller를 Activity나 Fragment에 구현하게 됩니다.

 

이런 아키텍처를 사용할 경우 다음과 같은 문제가 발생할 수 있습니다.

  • Activity의 생명주기가 변경된 경우, 이는 Activity 내부에 구현된 View나 Controller에도 영향을 미치게 된다.
  • 규모가 클수록 어느 한 곳을 변경할 경우 같이 변경해야 하는 경우가 많아진다.
  • View를 수정할 경우 Controller를 같이 수정해야 하는 경우가 생긴다.
  • Controller를 수정할 경우 Model을 같이 수정해야하는 경우가 생긴다.

이러한 문제를 해결하기 위해 느슨한 결합(Loose Coupling)을 지향하는 아키텍처가 등장한다.

  • MVP
  • MVVM

MVP: View와의 결합을 조금 느슨하게 해주는 Presenter의 등장

MVP 아키텍처의 경우 Controller를 View에서 정의하던 기존의 MVC 패턴과 달리

 

Presenter라는 것이 등장해 그것을 대신해 주게 된다.

즉, 다음과 같다.

View는 사용자 인터페이스를 처리하고, Model은 데이터를 처리합니다.
Presenter는 View와 Model 간의 중재자 역할을 수행하며,
View에서 발생하는 이벤트를 처리하고 Model에서 데이터를 가져옵니다.

하지만, MVP 패턴 또한 다음과 같은 문제가 발생하게 된다.

 

  • Presenter의 역할이 커지면서 Presenter 클래스가 복잡해지는 문제가 발생
    • 이로 인해 반대로 Presenter의 유지보수가 어려워지는 문제가 발생
  • MVP 패턴은 View와 Model 간의 상태 변화를 관리하기 어려움
    • View에서 발생하는 이벤트에 따라 Model의 상태를 변경하면, 이를 다시 View에 반영하기 위해 Presenter에서 많은 작업을 처리해야 한다.

이를 해결하기 위해서 등장한 것이 MVVM 패턴이다.


MVVM: View의 상태를 관찰하는 ViewModel의 등장

View의 상태를 알 수 있는 ViewModel이 등장하면서 View와 ViewModel 간의 완전한 분리가 가능해졌다.

 

그렇기 때문에 MVVM 아키텍처에서 ViewModel에선 UI에 대한 작업을 하지 않는다.

 

VIewModel에선 오직 데이터의 업데이트만 실시하며

 

View에선 해당 데이터를 보여주기만 한다.

 

이를 통해 다음과 같은 장점을 얻을 수 있었다.

 

  • 상태 관찰을 통해 Reactive 프로그래밍이 가능해졌다.
  • ViewModel에서 등장한 viewBinding, dataBinding으로 인해 작성 코드가 많이 줄어들고 쉽게 UI를 변경할 수 있게 됐다.
  • View와 ViewModel 간의 완전한 독립을 이루었다.
    • 이로 인해 테스트하기 쉬워짐

상태 관찰을 통해 Reactive 프로그래밍이 가능해짐

Activity, Fragment에서 LiveData라는 생명주기를 인식하는 발행자(Publisher)를 통해

 

View에서는 해당 값을 구독(Subscribe)한다는 점과 데이터가 바뀔 때 그것에 반응하는 동작을 실시하게 된다.

 

이를 통해 사용자가 특정 입력을 할 때마다 데이터를 변화시키고 변화한 데이터를 UI 상에 보여주거나 내부적으로 처리할 수 있게 된다.


viewBinding, dataBinding으로 인해 작성 코드가 많이 줄어들고 쉽게 UI를 변경할 수 있음

일반적으로 하나의 프로젝트에서 viewBinding, dataBinding 둘 다 사용하는 프로젝트도 있고

 

하나만 사용하는 프로젝트도 있습니다.

 

하지만, 그 특징을 잘 알아야 하는데 그 특징은 다음과 같습니다.

 

viewBinding의 특징

  • 컴파일 타임에 XML 파일과 매핑되는 바인딩 클래스를 생성 
  • 바인딩 클래스를 통해 View를 참조할 수 있음 
  • findViewById() 메서드보다 빠른 성능 
  • 바인딩 클래스 생성 시에만 XML 레이아웃 파일을 분석하므로 런타임 시에는 불필요한 XML 파일 분석이 발생하지 않음 
  • 빌드 타임 성능과 메모리 효율성이 우수함

 

dataBidning의 특징

  • 런타임 시에 View와 XML 파일 간의 데이터 바인딩을 수행
  •  XML 파일에 직접 표현식을 작성하여 UI를 업데이트하는 기능을 제공
  •  UI 업데이트와 관련된 작업을 간단하게 처리할 수 있음 
  • findViewById() 메서드보다 느린 성능 
  • 데이터 바인딩의 복잡도가 높아질수록 성능 저하가 발생할 수 있음

메모리 사용에 대한 최적화 가능

웹과 달리 모바일의 가장 큰 차이중 하나는

 

모바일에서 사용할 수 있는 리소스의 한계로 인해 운영체제가 언제든지 앱 구성요소를 제거할 수 있다는 것이다.

 

심지어는 현재 실행 중인 앱도 종료가 가능하다.

 

그렇기 때문에 항상 메모리 최적화를 생각하며 앱을 만들어야 하고

 

가능한 한 사용이 끝난 요소는 제거하여 다른 곳에서 사용할 수 있도록 해야 한다.

 

MVVM 패턴을 사용하면 View의 상태를 관찰하고 이를 통해 사용하지 않을 때는 제거하는 것이 가능하다.

 

하지만 View가 죽었다고 해서 바로 데이터가 삭제되지는 않는데

 

바로 삭제할 경우 다시 해당 view를 불러냈을 때 데이터를 재생성하는 비용이 들기 때문이다.

 

그래서 아래 그림과 같이 View가 죽더라도 일정 시간 동안 viewMocelScope에 데이터가 남아있게 된다.

 


 

안드로이드 매니페스트(AndroidManifest)의 역할은 무엇일까

안드로이드 매니페스트 파일은 무엇일까? 앱 구성 요소(Activity, Broadcast, Service, Provider)를 정의한 파일 앱이 요구하는 모든 권한을 식별 앱이 요구하는 최소 API을 선언 앱에서 요구하는 하드웨어

android-developer.tistory.com

 

안드로이드 MVVM을 사용하기 위한 필수 요소 AAC란 무엇인가?

기존에 사용하던 MVVM을 좀 더 간편하게 좀 더 정확하게 사용하기 위해 나온 것이 AAC이다. 즉, AAC란 아키텍쳐가 아니라 MVVM을 좀 더 잘 사용하기 위한 도구라고 생각하면 쉽다. 이전에 MVVM이란 무

android-developer.tistory.com

 

안드로이드 WorkManager는 왜 필요하고 어디서 쓰면될까?

안드로이드 코틀린 WorkManager는 어디서 사용하고 어떻게 사용하면될까? WorkManager는 왜 필요한가? 다른 백그라운드 처리들과의 차이 WorkManager는 어디에 사용하면될까? WorkManager는 어떻게 사용할 수

android-developer.tistory.com

 

리사이클러뷰의 생명주기 분석 및 메모릭의 원인

리사이클러뷰의 라이프 사이클 (화면에 보여지기까지의 순서) onAttachedToRecyclerView - 리사이클러뷰를 화면에 붙임 onCreateViewHolder - 홀더를 생성 onBindViewHolder - 홀더와 뷰를 바인딩 onViewAttachedToWindow

android-developer.tistory.com

 

Navigation을 사용한 화면 이동 시 라이프사이클 변화

Jetpack의 Navigation을 사용하여 화면 이동을 했을 때 Activity, Fragment가 정확히 어떤 타이밍에 어떻게 lifecycle이 순환하는지 확인한다 HTML 삽입 미리보기할 수 없는 소스 필요한 종속 항목 선언 https://d

android-developer.tistory.com

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글