기능 모듈에 대해 얘기하기 전에, 모듈화에 대해 다시 한번 짚고 넘어가보도록 하자.
모듈화는 코드의 독립성을 높히기 위한 개발 전략으로, 독립성을 높힌다는 것은 응집도를 높이고 결합도는 낮추는 것을 의미한다.
그리고 코틀린 정통 멀티 모듈(안드로이드의 멀티 모듈과는 조금은 다른 부분이 있다고 생각함)에서도 공통된 부분을 뽑아내어 작은 모듈로써 독립시키는 것을 의미한다.
이 과정에서 조심해야할 점이 하나 있다. 바로 공통으로 뽑아낸 부분(Common)의 역할이 비대해지는 것을 지양해야 한다는 것이다. 그래서 코틀린 멀티 모듈에서는 모듈을 나누는 정확한 역할을 정하는 것을 제시학고 있다.
위의 과정들이 어느 정도 감안되어 안드로이드에서의 멀티 모듈은 정확한 역할 중의 하나를 기능이라고 정한 것이라고 생각한다. 이것이 바로 기능 모듈이 된 것이라고 추측할 수 있다. 기능 모듈의 이전 Google App Architecture의 UI 모듈에 있던 패키지들이 기능에 따라 분화된 것이라고 봐도 무방해보인다.
참고로 기능 모듈이 특별한 것은 아니며, feature 모듈 아래에 역할을 가진 소모듈들이 기능이라는 공통점 안에서 응집되어 있는 형태이다. 또한 구글에서도 정해진 모듈의 기준은 없으며, 모듈 구분의 정확한 역할의 지표로 삼을 것 중의 하나가 기능 모듈이다.
위의 형태가 기존에 채택하여 도담도담 프로젝트에서 사용한 Google App Architecture의 권장 버전이다.
위의 형태가 멀티 모듈을 곁들인 Google App Architecture이다.
feature(=ui) 모듈을 기능 별로 작은 모듈을 둔 형태, core 모듈에서 data 모듈 등을 하위에 두고 있다.
정리하자면 안드로이드에서의 멀티 모듈은 이전의 모듈들(UI, data, domain등)을 독립성을 높히기 위한 전략이고, 이전의 모듈들에서 역할(기능, 코드 종류)에 따라 작은 모듈을 통해 이를 실현하기 위한 방법 중에 하나이다.