모듈화에 앞서 모듈이 뭔지 알아봅시다.
모듈이란??
소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다.
프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속 항목으로 사용할 수 있습니다. 각 모듈을 독립적으로 빌드, 테스트, 디버그할 수 있습니다.
Gradle일 경우 모듈 또한 프로젝트로 취급하기 때문에 모듈은 하위 프로젝트라고도 칭합니다.
모듈의 종류
안드로이드 공식 문서에서 제시하는 모듈의 종류는 다음과 같습니다.
1. 안드로이드 앱 모듈
앱 소스 코드, 리소스 파일, 앱 수준 설정을 포함한 모듈로 안드로이드 스튜디오에서 새 프로젝트로 만들면 나오는 'app'이 이 안드로이드 앱 모듈 중 하나입니다.
2. 기능 모듈
Google Play를 통해 앱 설치시에 기본 동작을 하는 APK, 라이브러리, 언어 등이 분할된 APK로 존재하고 있다가 사용자에 맞춰서 합쳐서 설치되는데 이때, Google Play가 기본적으로 분할하는 APK 외에 개발자가 추가적으로 기획이라던가 기술적인 문제로 필요에 의해 특정 기능을 분리하여 필요에 따라 설치, 삭제할 수 있도록 모듈들을 분리할 수 있습니다.
이를 Play Feature Delivery라고 하는데 Play Feature Delivery를 할 수 있도록 분리된 모듈들을 기능 모듈이라고 칭합니다.
자세한 정보는 다음을 참고하시면 됩니다.
3. 라이브러리 모듈
안드로이드에선 라이브러리도 모듈의 일종입니다.
라이브러리란?
필요한 기능들이 모여있는 코드의 묶음으로 사용자가 직접 호출하여 사용할 수 있습니다.
이 글에선 안드로이드 앱 모듈에 중점적으로 작성하였습니다.
모듈화란?
흔히 우리가 안드로이드 프로젝트를 모듈화를 한다고 하면 안드로이드 앱의 구성 요소들을 모듈 단위로 분리하는 것을 '모듈화'라고 합니다.
그렇다면 모듈화를 왜 하는 걸까요?
모듈화는 다음과 같은 이점을 얻기 위해 사용합니다.
1. 여러 앱을 빌드할 때, 일부 동일한 구성 요소를 재사용하기 위해
2. 앱을 새로운 기능을 모듈 단위로 추가하여 테스트를 쉽게하기 위해
3. 프로젝트 크기가 큰 경우 빌드 속도를 늘리기 위해
등등 다양한 이유가 존재합니다.
모듈화 기본 원칙
높은 응집력
모듈이 시스템 역할을 하는 코드 모음으로 구성되어야 함을 의미함
맡은 일이 명확히 규정되어 있고 특정 도메인 지식의 범위
낮은 결합력
모듈이 최대한 서로 독립적이어야 한다는 의미로 한 모듈의 변경 사항이 다른 모듈에 미치는 영향이 없거나 최소화해야 합니다. 모듈은 다른 모듈의 내부 작동을 알 수 없어야 합니다.
모듈 유형
데이터 모듈
일반적으로 저장소, 데이터 소스, 모델 클래스가 포함되어 있는 것
주요 역할
1. 특정 도메인의 모든 데이터 및 비즈니스 로직 캡슐화
2. 저장소를 외부 API로 노출
3. 외부로부터 모든 구현 세부정보 및 데이터 소스 숨기기
기능 모듈
앞선 모듈의 종류에서 나왔던 기능 모듈과는 다른 의미로 에플리케이션 기능의 고유한 부분을 캡슐화하는 모듈입니다.
위 네비게이션 바처럼 각 기능마다 모듈을 정의한 것을 의미합니다.
이 기능은 앱의 화면 또는 대상과 연결되어 로직 및 상태를 처리하는 UI와 ViewModel과 연결이 자주 됩니다.
그렇기 때문에 데이터 모듈과 연결됩니다.
앱 모듈
에플리케이션의 진입점을 나타내는 모듈로 기능 모듈과 연결되는 역할을 가지고 있습니다.
안드로이드 스튜디오에서 프로젝트를 생성할 때 나오는 기본 모듈인 app을 의미합니다.
일반 모듈(핵심 모듈)
다른 모듈에서 자주 사용하는 코드가 포함된 것으로 중복성을 줄이는 역할을 하며, 앱 아키텍처의 특정 레이어를 나타내진 않습니다. 일반 모듈에 대표적인 예시는 다음과 같습니다.
(1) UI 모듈
앱에서 어느 UI의 모든 기능을 재사용할 수 있도록 위젯을 하나의 모듈로 캡슐화 진행
(2) 애널리틱스 모듈
일반적으로 애널리틱스의 추적은 아키텍처와 상관없이 진행되기 때문에 여러 구성 요소에서 사용하기 위해 모듈화 하는 것이 좋습니다.
(3) 네트워크 모듈
여러 모듈에 네트워크 연결이 필요한 경우 네트워크 구성을 담당하는 모듈을 사용하는 것이 좋습니다.
(4) 유틸리티 모듈
에플리케이션 전체에서 재사용되는 작은 코드들을 넣을 수 있습니다.
안드로이드 앱 모듈의 구성
1. manifests
AndroidManifest.xml 파일을 말하며 기본 모듈인 app의 manifest와 동일합니다.
2. java
코틀린 및 자바의 소스 코드가 들어가는 곳으로 패키지 이름으로 구분됩니다.
3. res
XML 레이아웃, UI 문자열, 비트맵 이미지 등을 포함한 코드가 아닌 모든 리소스 파일들이 존재하는 곳입니다.
4. build.gradle
각 모듈마다 독립된 gradle 파일이 존재하며
이 gradle은 각 모듈의 빌드 및 테스트하는 데 필요한 특정 프로세스와 구성 가능한 설정을 하는 일종의 도구입니다.
모듈 간의 의존성을 설정하는 곳도 여기입니다.
출처
'Android' 카테고리의 다른 글
[안드로이드]페이징(Paging) - 1 (개념 위주) (0) | 2023.09.10 |
---|---|
[안드로이드] LiveData에 관하여 (0) | 2023.08.24 |
[안드로이드]CameraX(Preview, ImageCapture) (0) | 2023.08.06 |
[안드로이드] CustomTextView (0) | 2023.07.30 |
[안드로이드] 서비스 (0) | 2023.07.22 |