Android의 모듈식 접근 방식

2023. 12. 15. 13:53개발/Android

모듈의 종류

  • App Module : 메인 모듈. ui, android 구성요소, 부트스트랩 코드 포함
  • Feature Module : 각각 앱의 기능을 담당하는 모듈. 독립적으로 개발하고 테스트가 필요한 친구들을 이렇게 구분함
  • Library Module : 네트워크 계층, 데이터베이스 서비스 또는 유틸리티 클래스와 같은 재사용 가능한 구성 요소
  • Dynamic Feature Module(DFM) : 필요하지 않은 기능은 다운을 받지 않는 등, 선택적인 기능을 위한 동적 모듈 (ex : 앱 초기 설치 후 필요하지 않은 기능인 온보딩 모듈 등)

예시

  • 앱 모듈:app
  • 기능 모듈: feature_login, feature_dashboard
  • 라이브러리 모듈: network,database
  • 동적 기능 모듈:feature_extras

Feature 모듈 구현(로그인)

  1. 모듈 생성 :feature_login
  1. dependencies 설정: 필요한 경우 network, database 에 설정
  1. 기능 구현: 로그인과 관련된 Kotlin 클래스, 리소스, Android 구성요소 구현

모듈간의 Communication

  1. interface / DI를 사용해 모듈간의 통신을 함
  1. 기능 모듈 간의 직접적인 종속성을 피하기!

테스트

  1. 각 모듈의 단위 / 통합 테스트 작성
  1. 모듈간의 상호 작용을 테스트

빌드 및 실행

  1. 각 모듈은 독립적으로 컴파일 / 테스트 될 수 있음
  1. 앱 모듈은 모든 모듈을 단일 APK / AAR로 결합

장점

  1. 확장성 : 새로운 기능 추가 쉬움
  1. 유지보수 : 한 모듈 변경해도 다른 모듈은 영향 받지않음
  1. 더 빠른 빌드시간 : 변경된 모듈만 리컴파일
  1. 협업 : 여러명의 개발자가 서로 다른 모듈 동시 작업 가능

주의사항

  1. 모듈에 집중하고, 종속성 피하기
  1. gradle / dependency는 주기적으로 업데이트하기
  1. 모듈 전반에 일관된 코딩 컨벤션을 적용하기

Example

Root
  • settings.gradle
  • build.gradle

App Module (app)
  • 앱의 메인 진입점

Feature Modules
  • feature_login
  • feature_dashboard

Library Module (core)
  • 네트워크 서비스, 유틸 등의 모듈 위치

settings.gradle

모든 모듈을 포함하기

include ':app', ':feature_login', ':feature_dashboard', ':core'

App Module (app)
  • build.gradle (app)
  • feature modules + core library.
dependencies {
     implementation project(':feature_login')
     implementation project(':feature_dashboard')
     implementation project(':core')
}

Feature Module (feature_login)
  • build.gradle (feature_login)
  • login feature에 한정된 dependencies
dependencies {
     implementation project(':core')
     // Core module for shared functionality
     // ... other dependencies
}
  • LoginActivity.kt
package com.example.feature_login
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class LoginActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_login)
         // Login logic here
     }
}

Feature Module (feature_dashboard)
  • feature_login 랑 비슷하나, dashboard features에 특정되는것~

Library Module (core)
  • build.gradle (core)
  • Retrofit, Room, etc.
dependencies {     // Shared libraries like Retrofit, Room }
  • NetworkService.kt
package com.example.core.network  class NetworkService {
     // Implementation of network calls
}


Uploaded by N2T

'개발 > Android' 카테고리의 다른 글

메모리 누수를 해결하는 조금 더 자세한 방법  (2) 2024.01.03
Android SSL Pinning  (0) 2023.12.15
MenuProvider  (0) 2023.12.15
메모리 누수의 원인 10가지  (0) 2023.12.15
Android 에서 TDD를 습관화하기  (0) 2023.11.30