모듈의 종류
- App Module : 메인 모듈. ui, android 구성요소, 부트스트랩 코드 포함
- Feature Module : 각각 앱의 기능을 담당하는 모듈. 독립적으로 개발하고 테스트가 필요한 친구들을 이렇게 구분함
- Library Module : 네트워크 계층, 데이터베이스 서비스 또는 유틸리티 클래스와 같은 재사용 가능한 구성 요소
- Dynamic Feature Module(DFM) : 필요하지 않은 기능은 다운을 받지 않는 등, 선택적인 기능을 위한 동적 모듈 (ex : 앱 초기 설치 후 필요하지 않은 기능인 온보딩 모듈 등)
예시
- 앱 모듈:
app
- 기능 모듈:
feature_login, feature_dashboard
- 라이브러리 모듈:
network,database
- 동적 기능 모듈:
feature_extras
Feature 모듈 구현(로그인)
- 모듈 생성 :
feature_login
- dependencies 설정: 필요한 경우
network, database
에 설정
- 기능 구현: 로그인과 관련된 Kotlin 클래스, 리소스, Android 구성요소 구현
모듈간의 Communication
- interface / DI를 사용해 모듈간의 통신을 함
- 기능 모듈 간의 직접적인 종속성을 피하기!
테스트
- 각 모듈의 단위 / 통합 테스트 작성
- 모듈간의 상호 작용을 테스트
빌드 및 실행
- 각 모듈은 독립적으로 컴파일 / 테스트 될 수 있음
- 앱 모듈은 모든 모듈을 단일 APK / AAR로 결합
장점
- 확장성 : 새로운 기능 추가 쉬움
- 유지보수 : 한 모듈 변경해도 다른 모듈은 영향 받지않음
- 더 빠른 빌드시간 : 변경된 모듈만 리컴파일
- 협업 : 여러명의 개발자가 서로 다른 모듈 동시 작업 가능
주의사항
- 모듈에 집중하고, 종속성 피하기
- gradle / dependency는 주기적으로 업데이트하기
- 모듈 전반에 일관된 코딩 컨벤션을 적용하기
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