참고자료)
[DroidKnights 2019 - Track 2] 장선옥 - Android Project with Multi Module
프로젝트를 하면서 앱 확장성을 고려해 "멀티 모듈"로 개발해보기로 했습니다. 저는 이전까지 모듈을 나눠서 개발해본 적이 없었습니다,,! 하지만 규모가 있는 프로젝트들은 보통 멀티모듈을 사용하기도 하고, 빌드 시간 단축, 기능 확장 등의 여러 장점이 있는 멀티모듈을 사용해보고 싶었습니다!! 모듈이 무엇인지, 라이브러리와 모듈의 차이점이 무엇인지 등의 개념부터 차근히 공부해봅시다~
모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다.
프로젝트에서 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그 할 수 있습니다.
안드로이드 프로젝트를 만들면 자동으로 생성되는 app도 모듈의 한 종류입니다
라이브러리도 일종의 모듈입니다
안드로이드 라이브러리와 모듈은 구조적으로 완전히 동일합니다! 구조적으로 동일하다는건 안드로이드 라이브러리도 앱모듈과 동일하게 자바 코틀린파일이나 drawable같은 resource파일을 포함해서, 매니페스트까지도동일하게 포함하고 있습니다
차이는 뭘까?
여러 앱을 빌드할 때, 일부 동일한 구성 요소를 재사용할 때 유용합니다.
또한 앱에 새로운 기능을 추가할때 기존 코드에 기능을 추가하려면 힘이 더 들지만, 새로운 기능을 위한 모듈을 따로 만들고, demoapp 을 만들어서 테스트하면 훨씬 쉽습니다.
만약 기존 앱의 domain, data 계층이 모듈화 되어있다면 기존앱의 리소스들을 그대로 가져다가 테스트할 수 있으므로 유용합니다.
(1) 이 기능이 조금이라도 다른 앱에 이용될 수 있는 가능이성이 있을때
(2) 이 기능이 잘 된다면 별도의 앱이 될 수 있다고 생각이 될때
(3) 이 기능이 너무 커서 demo가 실제 기능이 될 때 까지 오랜시간이 걸릴다고 판단될때
(4) 기존 앱이 너무 무거워서 개발할때 앱을 자주 빌드해서 확인하기 버거울 때
(1) 코드 재사용성이 높아진다
(2) 의존성이 적은 코드를 작성할 수 있다.
(3) 모듈 단위의 코드 수정이 용이하다.
(4) 모듈 단위 테스트를 할 수 있다.
(5) 빌드 시간 감소 가능
여기서 주의할 건 빌드 시간 감소 '가능'하다는 겁니다!!
기본적으로 빌드를 할때 변경된 모듈만 빌드하므로 빌드 시간 감소를 기대할 수 있습니다
하지만! 모듈간 종속성이 복잡해지고 모듈의 수정이 많다면 빌드 시간이 증가될 수 있습니다.
(1) 하나의 앱만 있는데, 모듈을 여러개로 나눠놓으면 코드량이 더 많게 느껴진다.
(2) 해당 프로젝트를 처음보면 코드 전체를 보고 이해하기 어렵다.
(3) 위의 이유로 오히려 빌드 시간이 늘어날 수 있다.
따라서 두개 이상의 앱을 서비스 하고 있거나, 여러 개의 앱으로 분리될 경우를 대비하고 싶은 경우에 잘 변하지 않는 기능/독립적으로 구성 가능한 기능을 모듈화 하는게 좋습니다