Android 앱 모듈화

김성환·2024년 4월 14일

안드로이드스튜디오에서 프로젝트를 만들면 app 이라는 모듈에 액티비티가 구현되 모습이 보일것 입니다.
이 app이라는 모듈안에서 해당 앱에필요한 코드를 적용하는 방식을 자주사용하는데
오늘 포스팅하려는 모듈화의 경우 app하나의 단독 모듈이아니라 기능이나 논리적형태로 나누어 모듈을 생성하고 적용하는 방식에 대하여 말해볼까 합니다.

모듈이란 뭘까?

위에서 말했듯 모듈은 앱을 구성하는 요소로 코드나 리소스 등을 하나로 묶는 단위를 뜻하며 3가지 특징을 가집니다.

  • 독립적인 일을 수행
  • 통상 모듈 하나가 하나 이상의 완전한 기능을 수행
  • 단순하고 간단명료

모듈이 논리적 또는 기능적으로 분리되어 격리되어있기 때문에 이러한 특징들을 가집니다.

모듈은 이러한 특징을 가지기에 시간이 지남에 따라 규모가 커져 확장성, 가독성 및 전반적인 코드 품질이 떨어지는 경우를 예방할수 있습니다. 이러한 방법을 모듈화라고 합니다.

단일모듈앱과 다중모듈앱을 비교하면 그차이를 크게 느낄수 있습니다. 단일모듈앱은 모듈이 한개이므로 그 결합도가 높아 유지보수가 힘들수 있습니다. 그렇지만 다중 모듈을 사용하게 되면 모듈이 여러개이므로 기능을 수정할때 해당 모듈만 수정하면 되기 때문에 시스템 설계와 유지보수의 복잡성이 줄어듭니다. 이는 앱이 커지면커질수록 더욱 잘느낄수 있을것입니다. 이밖에도 재사용성, private말고도 internal을 사용할수있게되어 더욱 엄격한 공개 상태 제어등 여러 장점을 얻게 됩니다.

이러한 모듈화도 단점이 있습니다.

코드베이스가 세분화되면 될수록 모듈이 더 작고 숫자가 늘어납니다. 코드베이스의 크기와 상대적 복잡성을 고려해야 합니다. 너무 세분화되면 오버헤드가 가중되고 너무 대략적이면 모듈화의 이점이 줄어듭니다.

  • 너무 세분화됨
    빌드 복잡성과 상용구 코드가 늘어남으로써 모든 모듈에서 일정량의 오버헤드가 발생합니다. 복잡한 빌드 구성으로 인해 모듈 간에 일관된 구성을 유지하기가 어렵습니다. 상용구 코드가 너무 많아 관리하기 어렵고 번거로운 코드베이스가 됩니다. 오버헤드가 확장성 개선에 해가 되는 경우 일부 모듈을 통합하는 것이 좋습니다.

  • 너무 대략적임
    반대로 모듈이 너무 커지면 또 하나의 모놀리식이 될 수 있으며 모듈성이 제공하는 이점을 놓칠 수 있습니다. 예를 들어 작은 프로젝트에서는 데이터 영역을 단일 모듈 내에 넣어도 괜찮습니다. 그러나 크기가 커지면 저장소와 데이터 소스를 독립형 모듈로 분리해야 할 수 있습니다.

  • 너무 복잡함
    프로젝트를 모듈화하는 것이 항상 적합한 것은 아닙니다. 결정적 요소는 코드베이스의 크기입니다. 프로젝트가 특정 기준점 이상으로 확장될 것 같지 않으면 확장성 및 빌드 시간 면의 이점은 누릴 수 없습니다.

다음글에서는 일반적으로 사용되는 모듈화 패턴을 알아가 봅시다.


reference
https://developer.android.com/topic/modularization?hl=ko
https://www.charlezz.com/?p=46545

0개의 댓글