ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] 안드로이드 모듈화 Modularization 적용하기
    AOS 2023. 3. 4. 19:00
    반응형

    플레옹 프로젝트의 MVP 기능을 개발하면서 하나의 app 모듈에서 개발하였다. 

    😰

    기능이 점점 많아지면서 코드 규모가 매우 커졌고 내가 내 코드를 보아도 복잡할만큼 난잡해졌다. 또한 앱이 커지면서 지속적으로 빌드시간이 증가하였다. 추후에 이 많은 기능들을 관리하려면 모듈화는 필수적이였다.

     

    그래서 중간발표가 끝나고 UI 수정작업을 하면서 모든 기능들을 모듈화였다. 

    모듈화를 한 뒤로 유지 보수 하는데 훨씬 간편했으며 빌드 시간도 개선되었다. 서비스가 성장해갈 수록 모듈화는 필수적이다.

     

    Android 공식문서의 Android 앱 모듈화 가이드를 참고하였다.

    모듈은 app 모듈, feature 모듈, core 모듈 세가지로 분리하였다.

     

    ** MY MODULE **

    1. 앱 모듈 (app module)

    app 모듈은 앱의 진입점으로 모든 기능 모듈에 종속되며 앱의 완전한 그래프를 제공한다.

    app/res/navigation/nav_pleon.xml

    <?xml version="1.0" encoding="utf-8"?>
    <navigation xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/nav_pleon"
        app:startDestination="@id/nav_feed">
        <include app:graph="@navigation/nav_login"/>
        <include app:graph="@navigation/nav_plant_register"/>
        <include app:graph="@navigation/nav_garden"/>
        <include app:graph="@navigation/nav_doctor"/>
        <include app:graph="@navigation/nav_feed"/>
        <include app:graph="@navigation/nav_my"/>
    </navigation>

     

    각 feature 모듈에는 각 기능의 navigation이 있다. (nav_feed, nav_doctor, nav_garden 등등)

    이 id를 설정하면 bottom navigation에 연결할 수 있다.

    app/res/menu/bottom_navigation.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@id/nav_feed"
            android:icon="@drawable/tab_selector_feed"
            android:title="@string/bottom_nav_feed" />
        <item
            android:id="@id/nav_doctor"
            android:icon="@drawable/tab_selector_doctor"
            android:title="@string/bottom_nav_doctor" />
        <item
            android:id="@id/nav_garden"
            android:icon="@drawable/tab_selector_garden"
            android:title="@string/bottom_nav_garden" />
        <item
            android:id="@id/nav_my"
            android:icon="@drawable/tab_selector_my"
            android:title="@string/bottom_nav_my" />
    </menu>

     

    2. 피처 모듈(feature module)

    피처 모듈은 독립적인 기능을 분리한다. 특히 앱의 bottom navigation을 분리한다.

    feed, garden, doctor, feed-common, plant-register, login, my 로 7개의 모듈을 생성하였다. 보통 feature module은 view와 viewmodel로 구성되어있다.

    내 프로젝트의 bottom menu는 feed, garden, doctor, my 로 총 4개이다.

    이 4개의 모듈을 포함하고 나머지 독립적인 기능인 login, plant-register 2개의 모듈을 더 생성하였다.

    나머지 1개 feed-common 모듈은 개발하다가 생성된 모듈이다. feed-common은 피처모듈이자 일반모듈이다.

    feed, doctor, garden에서 공통적으로 사용하는 feed adapter와 doctor adapter 가 있었다.

    common 모듈에 두기에는 recyclerview는 안드로이드를 알고 있었고, common-ui에 두기에는 common-ui는 common의 data class 등을 참조하고 있지 않아 둘다 불가능했다. 그래서 feed-common 모듈을 생성하게되었다.

     

    3. 일반 모듈(common module, core module)

    일반 모듈은 다른 모듈에서 자주 사용하는 코드가 포함된다. common, common-ui, foundation 모듈 3가지를 생성했다.

    common 모듈은 안드로이드와 관련없이 만들어 안드로이드 프레임워크와 독립적인 기능을 담았다. data, repository, network 등으로 구성하였다.

    common-ui는 앱의 맞춤 UI를 모든 기능에서 재사용할 수 있도록 캡슐화 한 것이다. 이를 이용하면 기능들의 UI를 일관되게 만들 수 있다. 또한 UI 수정할 때 간편하게 바꿀 수 있다.

    foundation 모듈은 어떠한 앱이든 가져가 사용할 수 있는 독립적인 모듈이다. (network 담당)

     

    모듈화의 장점

    • 재사용 및 확장성 : 코드를 공유하고 동일한 기반인 여러앱을 빌드할 수 있다. 또한 동일한 UI를 재사용하여 일관되게 만들 수 있다.
    • 유지보수 : 모듈의 역할히 잘 구분되어 있을 수록 디버깅이나 새로운 기능을 개발할 때 어디를 수정해야할지 빠르게 파악할 수 있다.
    • 빌드 시간 단축 : 전체 앱을 빌드 하는데 1분 52초가 걸리는데  변경된 모듈이 있을 때 빌드 시간은 14초로 단축되었다. 이는 app 모듈에 모든 코드가 있는 것보다 모듈화를 하였을 때 빌드 시간이 단축되고 프로젝트의 생산성이 높아짐을 확인할 수 있다.

     

    참고)

    https://developer.android.com/topic/modularization/patterns?hl=ko 

     

    일반적인 모듈화 패턴  |  Android 개발자  |  Android Developers

    일반적인 모듈화 패턴 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 모든 프로젝트에 맞는 하나의 모듈화 전략은 없습니다. Gradle의 유연한 특성으로 인해

    developer.android.com

    반응형
Designed by Tistory.