
이전 포스팅에 이어 진행해보자.
구글은 공식 문서를 통해 안드로이드 앱에 클린 아키텍처 철학을 녹여낸 'Modern Android Architecture (MAA)'를 권장하고 있다.
아래와 같이 크게 세가지로 분류한다.
크게 세가지로 나뉘는 각 레이어들이 어떤 역할을 가지고 있는지 정리를 해보자면,
화면에 데이터를 표시하고 사용자의 이벤트를 처리합니다.
구성: Activity, Fragment, ViewModel, UI State.
특징: ViewModel은 Domain 계층의 데이터를 가져와 UI가 먹기 좋게 가공합니다.
앱의 가장 복잡한 비즈니스 로직이 위치합니다. 다른 계층에 의존하지 않는 순수한 Kotlin/Java 코드로 작성하는 것이 이상적입니다.
구성: UseCase, Entity.
특징: 여러 Repository에서 데이터를 조합하거나 복잡한 계산을 수행합니다.
비즈니스 데이터를 어디서 가져올지 결정합니다.
구성: Repository, Data Source (Retrofit, Room, Firebase 등).
특징: 외부 API나 로컬 DB에서 데이터를 가져와 Domain 계층의 모델로 변환하여 전달합니다.
처음 이 세가지 레이어로 구분하는 멀티 모듈을 도입하는 것이 크게 어려울것이라 생각하지 않았다. 이해하기에 어렵지 않았고 바로 따라해 볼 수 있을 것이라 생각했다. 하지만 내가 맞닥뜨린 실제의 안드로이드 클린 아키텍처의 실상은 달랐다.
이전 포스팅에서 내가 참고하고자 하는 두가지 오픈 소스 프로젝트를 보면, nowinandroid와 pokedex-compose 같은 프로젝트들은 세가지 레이어들을 더욱 잘게 쪼개서 사용하고 있었다.
그 뿐만 아니라, gradle 전략도 기존과 많이 달랐다. 프로젝트의 기본을 구성하는 gradle을 제대로 파악하지 못하니, 어설프게 따라 하는 수준밖에 되지 않았다.
무작정 좋은 예제를 찾아서 제대로 이해하지 않고 어설프게 따라했던 부적절한 개발을 지금이라도 수습해보려한다.
큰 고민 없이 선택했지만 참고하고자 하는 두 프로젝트는 훌륭한 가이드이므로 제대로 분석하고 습득해서 최대한 내것으로 만들어 보자.
등등에 대해 좀 더 깊은 고찰과 학습을 진행해보자.
과거에 멀티모듈을 학습하기 위해 무작정 따라 했던 nowinandroid 에 대해 분석을 시도해본다.
일단 nowinandroid 가 제시하는 build-logic 모듈에 대해서 알아보자.
물론 다음 포스팅에서 진행한다.