목차
개요
지난 번 아키텍처에 대해서 공부하며 Android를 module단위로 나누어 CleanArchitecure 를 적용하는것이 권장 되고 있다는 것을 알았다.
Multi module은 무엇인지 MultiModule을 활용하여 CleanArchtecture를 어떻게 적용하는지에 대해 알아보고자 한다.
멀티 모듈이란?
- 모듈: 소스 파일 및 빌드 설정으로 구성된 모음
- 라이브러리: 라이브러리도 모듈의 일종
- 멀티모듈: 한 어플의 모듈을 개발 편이성, 이식성, 재사용성등을 위해 여러 개로 나눈 것
모듈을 나누는 기준
- 기능의 이식성이 높을 때
- 기능의 재사용성이 높을 때
- 기능의 빌드시간이 오래걸려 개발시간을 지체시킬 때
멀티 모듈의 장점
1) 코드의 재사용성 증가
2) 의존성 낮춤
3) 코드 유지보수 용이
4) 모듈 단위 테스트
5) 빌드 시간 감소(설계를 잘 못하면 오히려 빌드시간이 증가할 수 있다.)
Clean Archithecture
- 클린 아키텍처: 계층을 크게 나누어서 관심사를 분리, 각 분리된 클래스가 한 가지 역할만 할 수 있도록 구현하는 방식
- 계층 내부로 들어갈 수록 의존성이 낮아짐
- 안드로이드에서는 Presentatino, data, Domain(선택사항) 이 3계의 계층을을 권장 아키텍처로 제공하고 있다.
1) Data 계층: Dmoain 계층에 의존성을 가지고 있는 계층, 말 그래도 Data들을 control 하는 계층(CRUD)
- API 통신과 그 결과로 가져오는 Data Entity, 내부 DB(Room)과 DAO
- 위의 데이터(서버, 내부)를 사용하기 위한 Repository와 그 구현부
- Data 계층 데이터와 Domain 계층 데이터로 변환해주는 Mapper 클래스
2) Domain 계층: 의존성을 가지고 있지 않은 계층, 비지니스 로직에 필요한 Data Model과 UseCase가 포함되어 있는 계층. Repository Pattern을 사용하면 DataModel에 대한 Repository도 포함
3) Presentation 계층: Data 계층과 Domain 계층에 의존성을 가지고 있는 계층, 화면과 입력에 대한 처리 등 UI와 직접적으로 관련된 부분
- UI(Activity, Fragment)
- VM(각 화면에 사용될 ViewModel)
- DI
- Module
기존 프로젝트에 적용해보기
1) 간략한 기능설명
- 권한 요청
- 위치 정보 MQTT통신으로 서버 전송
- APi호출, 호출된 JSON 데이터 화면에 출력
- Firebase를 이용한 Push 알림(토큰 생성, 토큰 전송(MQTT)
2) 추가해야할 것
- Api로 호출된 데이터 저장
3) multimodule 적용
- data계층(Data레이어): MQTT 관련, API 호출관련, Firebase 관련, 위치정보관련
- presentation계층(UI레이어): Actity, toolbar.xml, menu.xml 등 UI와 관련 된 것
4) 추가로 학습해야할 것
Compose: UI 구성에 권장되는 선언형 방식
domain과 비지니스로직에 대한 이해
https://developer.android.com/topic/architecture/recommendations?hl=ko#compose
'IT > Android' 카테고리의 다른 글
Android, Hilt를 사용해야하는 이유와 사용방법 (0) | 2024.04.08 |
---|---|
Android(Kotlin), Compose의 NavController 활용하기 Splash, Fragment만들기 (0) | 2024.04.08 |
Android, Compose material2 vs material3 (0) | 2024.04.08 |
Android(Kotlin), Jetpack Compose로 구현한 UI에서 MPAndroidChart를 활용하여 그래프 그리기 (0) | 2024.04.08 |