구글 로그인을 구현해볼 겸 안드로이드 Architecture Components를 활용해 mvvm과 observer pattern을 이해하기 위해 예제를 만들게 되었습니다.
생각보다 mvvm의 View와 Logic 분리에 고민을 많이 하게 되는 시간이었습니다.
조언, 반박 언제든 환영입니다!
위 이미지는 필자가 처음 안드로이드 개발을 시작했을 때의 패키지 구조입니다.
Model, Network, Activity 등등의 코드가 아주 자유분방하게 섞여있습니다.
또한 내부 코드도 마찬가지로 다양하게 혼재하고 있습니다.
앱의 규모가 작고, 혼자서 진행하는 프로젝트이면 그렇게 큰 문제가 일어나지는 않을 것입니다.
하지만, 앱의 규모가 커지면 커질수록, Activity와 Fragment의 코드는 방대해질 것이며, app 패키지 내에서 원하는 파일을 찾기 위한 비용이 만만치 않을 것입니다.
먼저 소개할 AAC라는 개념은 위 문제를 포함하여 앱을 개발하면서 만날 수 있는 문제들을 해결하기 위해 라이브러리를 제공합니다.
→ 안드로이드 앱을 개발하면서 자주 만날 수 있는 문제들을 쉽게 해결할 수 있는 라이브러리들의 모음
개발자의 평생 과제인 유지보수를 위해서 ,정확히는 관심사의 분리를 위해서 입니다.
View에 모든 코드를 관리하는 것에서 생기는 문제를 해결하기 위해 AAC인 LiveData, ViewModel을 사용하면서 아래의 아키텍처를 적용합니다.
위의 다이어그램은 구글에서 권장하는 아키텍처를 다이어그램으로 표현한 것입니다.
한줄 요약하면, Repository로부터 ViewModel에서 데이터를 관리하고 View는 이를 관찰하고 있다는 것입니다. 이제 여기서 AAC를 적용하여 MVVM 패턴을 적용할 수 있습니다.
→ UI와 Logic을 분리할 수 있는 디자인 패턴입니다. 구조는 아래 이미지와 같습니다.
Model
View
ViewModel
여기서 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
일단 1빠 빨리 다음글로 넘어가겠읍니다