본문 바로가기
Android

[Android Module] Android 모듈화 왜 하는 걸까?

by 너츠너츠 2022. 5. 28.

모듈이란?

안드로이드 공식홈페이지에 따른 설명에 의하면 아래와 같습니다.

모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속 항목으로 사용할 수 있습니다. 각 모듈을 독립적으로 빌드, 테스트, 디버그할 수 있습니다.

위의 설명처럼 모듈은 소스 파일과 빌드 설정으로 구성된 모음이며 저희가 처음 프로젝트를 생성 시 만들어지는 app 또한 모듈의 한 종류입니다.

 

안드로이드 스튜디오에서 [File -> New -> New Module] 또는 [app클릭 -> New -> Module] 로 모듈을 추가할 수 있습니다.

모듈을 생성할 때의 대표적인 3가지를 설명하겠습니다.

 

1. Application - Phone & Tablet

안드로이드 프로젝트를 만들 때 기본으로 생성되는 app 모듈이며 빌드 결과로 APK 파일이 생성됩니다.

하나의 프로젝트에 여러 개의 app 모듈이 들어갈 수 있으며 각각 빌드 가능합니다.

 

-> 하나의 프로젝트에 여러 개의 app 모듈을 만드는 이유는 기존의 만들어놓은 custom layout이나 코드들을 재사용하기 수월하기 때문입니다.

ex) 동일한 기능을 가진 앱이지만 하나는 한국버전, 나머지는 US 버전.

 

2. Android Library

안드로이드 프로젝트에서 지원되는 모든 파일 형식을 포함할 수 있습니다. 다른 Application 모듈의 종속 항목으로 추가할 수 있습니다. 빌드 결과로 AAR 파일이 생성됩니다.

 

3. Java or Kotlin Library

순수한 Java or Kotlin 코드로 이루어진 모듈입니다. 안드로이드 프레임워크로 부터 독립적인 기능을 구현할 때 사용합니다. 빌드 결과로 JAR 파일이 생성됩니다.

 

그렇다면 왜 모듈을 생성하는 걸까?

간단한 프로젝트의 경우 앱이 굉장히 작기 때문에 꼭 필요하지 않을 수 있습니다. 하지만 일반적으로 상용되는 서비스의 경우 정말 많은 양의 코드가 발생하고 복잡한 구조를 가지고 있기 때문에

1)의존성을 낮추고 2)코드의 재사용성을 높이며 3)빌드 시간을 줄이기 위해 모듈을 생성하는 것입니다.

 

1. 의존성이 낮아질 수 있다.

위의 사진과 같이 MVVM 패턴에 맞게 의존성 규칙을 정했다고 가정하면 Activity -> ViewModel -> Repository -> Model 의 과정을 갖게 됩니다. 하지만 의존성 규칙을 잘 정했다고 하더라도 app 모듈 안에서 모든 기능을 구현하는 모놀리틱 프로젝트에서는 규칙을 위반하는 실수가 나오기 쉽기 때문에 build.gradle 파일에 사용할 모듈의 의존성을 직접 추가해줌으로써 사용하지 않는 모듈들은 접근할 수 없도록 하는 것입니다.

 

2. 빌드 속도가 감소난다.

프로젝트 사이즈가 커지면 빌드 속도 역시 늘어날 수 밖에 없습니다. 하지만 멀티 모듈 구조로 프로젝트를 구성하였을 때 빌드 속도를 단축시킬 수 있습니다.

https://www.freecodecamp.org/news/how-modularisation-affects-build-time-of-an-android-application-43a984ce9968

표에 의하면 모듈이 많을 수록 빌드 시간이 단축되는 것을 확인할 수 있습니다.

 

3. 코드의 재사용성

CustomView나 필요한 코드를 가지고 있는 모듈을 호출하면 되기 때문에 굉장히 재사용성이 좋습니다. 또한 CustomView에서 문제가 생길 경우 전체 다 수정하는 것이 아닌 해당 모듈만 수정하면 되는 장점이 있습니다.

 

참고

https://leveloper.tistory.com/201

 

[Android] Multi Module로 Android project 구성하기

 최근에 회사에서 프로젝트를 진행하며 신입 때 작성했던 코드를 수정해야 하는 일이 생겼습니다. 첨부파일 업로드, 다운로드 관련 기능을 제공하는 클래스들이었는데, 당시 아키텍처에 대한

leveloper.tistory.com

 

반응형

댓글