본문 바로가기
IT/Android

Android 프로젝트에서 Clean Architecture 적용해보기

by Cyber_ 2024. 4. 16.

    목차

      개요

      지난 번 아키텍처에 대해서 공부하며 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