[Android] MVVM + AAC + FireBase Google Login #1

Choi Sang Rok·2022년 6월 1일
3
post-custom-banner

구글 로그인을 구현해볼 겸 안드로이드 Architecture Components를 활용해 mvvm과 observer pattern을 이해하기 위해 예제를 만들게 되었습니다.
생각보다 mvvm의 View와 Logic 분리에 고민을 많이 하게 되는 시간이었습니다.
조언, 반박 언제든 환영입니다!


👨‍🦳서론



위 이미지는 필자가 처음 안드로이드 개발을 시작했을 때의 패키지 구조입니다.

Model, Network, Activity 등등의 코드가 아주 자유분방하게 섞여있습니다.

또한 내부 코드도 마찬가지로 다양하게 혼재하고 있습니다.

앱의 규모가 작고, 혼자서 진행하는 프로젝트이면 그렇게 큰 문제가 일어나지는 않을 것입니다.

하지만, 앱의 규모가 커지면 커질수록, Activity와 Fragment의 코드는 방대해질 것이며, app 패키지 내에서 원하는 파일을 찾기 위한 비용이 만만치 않을 것입니다.

먼저 소개할 AAC라는 개념은 위 문제를 포함하여 앱을 개발하면서 만날 수 있는 문제들을 해결하기 위해 라이브러리를 제공합니다.



🤷‍♂️Android Architecture Components(AAC)


→ 안드로이드 앱을 개발하면서 자주 만날 수 있는 문제들을 쉽게 해결할 수 있는 라이브러리들의 모음

  • 테스트와 유지관리가 쉬운 앱을 디자인하도록 돕는 라이브러리 모음
  • ViewModel은 앱 회전시 제거되지 않는 UI 관련 데이터를 저장
  • LiveData를 사용하여 모델 변경되면 뷰에 알리는 데이터 개체를 빌드
  • ~~Room은 SQLite 개체 매핑 라이브러리 RxJava, Flowable, LiveData Observable을 반환~~

그래서 왜 사용하는가?

개발자의 평생 과제인 유지보수를 위해서 ,정확히는 관심사의 분리를 위해서 입니다.

View에 모든 코드를 관리하는 것에서 생기는 문제를 해결하기 위해 AAC인 LiveData, ViewModel을 사용하면서 아래의 아키텍처를 적용합니다.

위의 다이어그램은 구글에서 권장하는 아키텍처를 다이어그램으로 표현한 것입니다.

  1. View(Activity/Fragment)는 ViewModel의 LiveData를 구독하고 있습니다. 따라서 ViewModel의 데이터가 변경되면 Activity에 보여지게 됩니다.
  2. ViewModel은 LiveData를 가지고 있으며, 로컬의 DB, 혹은 Network 통신을 통해 데이터를 가져와 발행할 수 있습니다.

한줄 요약하면, Repository로부터 ViewModel에서 데이터를 관리하고 View는 이를 관찰하고 있다는 것입니다. 이제 여기서 AAC를 적용하여 MVVM 패턴을 적용할 수 있습니다.



💁‍♂️MVVM 패턴


→ UI와 Logic을 분리할 수 있는 디자인 패턴입니다. 구조는 아래 이미지와 같습니다.

Model

  • 데이터 모델, 비즈니스 로직, 데이터를 포함합니다
  • 보통 Repository(DB,Network)에서 데이터를 반환합니다.

View

  • Activity, Fragment등, 뷰의 역할을 담당합니다.
  • 비즈니스 로직은 배제하지만, UI 관련 로직, intent는 수행할 수 있습니다.

ViewModel

  • View에서 보여줘야 하는 데이터와, 명령을 담고 있습니다.
  • 보통 View가 Viewmodel의 데이터를 바라보고 있는 "Observer Pattern"의 형태로 사용되기 때문에
    ViewModel에서 모델의 데이터를 변경하면 이를 감지하고 변경된 데이터를 View가 보여줍니다.

여기서 AAC ViewModel과 MVVM의 ViewModel은 다릅니다.
AAC ViewModel : UI 데이터를 유지, 관리하기 위해 AAC에서 제공하는 클래스
MVVM ViewModel : MVVM 아키텍처에서의 한 역할, View의 데이터를 관리해주고 바인딩 해주는 역할


의존성 관계

View → ViewModel → Repository

View는 ViewModel을 알지만, Repository는 ViewModel을 모릅니다. (import 하고 있지 않다는 뜻입니다.)

FireBase와 GoogleLogin 관련된 문서는 공식 문서만큼 잘 나와있는 곳이 없는 것 같습니다.

여기를 참고해주세요!

다음 포스팅에서 예제를 통해 이해해 보겠습니다.
https://velog.io/@evergreen_tree/Android-MVVM-AAC-FireBase-Google-Login-2

profile
android_developer
post-custom-banner

3개의 댓글

comment-user-thumbnail
2022년 6월 1일

일단 1빠 빨리 다음글로 넘어가겠읍니다

답글 달기
comment-user-thumbnail
2022년 6월 1일

카카오 로그인 구현도 '해줘'세요

답글 달기
comment-user-thumbnail
2022년 6월 1일

글이 한달만이네요.. 독자들과 시간 약속 좀 지켜주세요

답글 달기