여러 Gradle 모듈이 있는 프로젝트를 멀티(다중) 모듈 프로젝트라고 함.
증가하는 코드 베이스 문제
- 코드량이 계속 증가하다 보면 시간에 지남에 따라 확장성, 가독성 및 전반적인 코드의 품질이 떨어지는 경우가 많음.
- 코드의 규모가 커지고 있음에도 불구하고, 쉽게 유지관리 할 수 있는 구조를 적용을 안한 것.
- 모듈화는 유지관리 가능성을 개선하고 위 같은 문제를 방지할 수 있는 방식으로, 코드 베이스를 구조화하는 방법임.
모듈화란?
- 코드베이스를 느슨하게 결합된 독립적은 부분으로 구성하는 방법.
- 각 모듈은 독립적이며, 명확한 역할을 함.
- 하위 문제를 해결하기 위해 더 작고 쉬운 문제로 나누면 대형 시스템 설계와 유지보수의 복잡성이 줄어듬.

멀티 모듈을 구성하는 기준은 상황에 따라 다름. 환경에 알맞게 전략을 세워 설계해야함.
응집도, 결합도, 세분성 이 3가지가 모듈을 구성하는 기준임.
계층, 기능별로 혹은 계층 + 기능별로 모듈을 나눠서 이점을 가져가자.
모듈화의 이점
- 재사용성
- 코드를 공유하고, 여러 앱을 빌드할 수 있음.
- ex) feature:news을 버전에 따라 포함 시킬 수 있음.
- 엄격한 가시성 제어
- 모듈을 사용하면 코드베이스의 다른 부분에 노출할 내용을 쉽게 제어할 수 있음.
- 공개 인터페이스를 제외한 모든 항목을
internal
, private
으로 표시하여 모듈 외부에서 사용하지 못하도록 할 수 있음.
- 확장성
- 적절히 모듈화된 프로젝트는 관심사 분리 원칙을 수용하므로 결합을 제한함. 이를 통해 더 큰 자율성으로 더 많은 권한을 얻게 됨.
- 빌드 시간
- 전체 모듈을 빌드 할 필요가 없으므로 빌드 시간을 줄이는데 유리해짐.
- 증분 빌드, 빌드 캐시 또는 병렬 빌드와 같은 Gradle 기능은 모듈성을 활용하여 빌드 성능을 개선할 수 있음.
- 등
결론
- 재사용성, 가시성 제어 등의 이점이 필요하거나 이점들을 얻고 싶다면 모듈화를 고려할 필요가 있음.
- 규모가 큰 프로젝트는 멀티 모듈을 지향해야한다고 생각함.