[Android, Multi Module] 멀티모듈의 개념과 장단점

 

모듈화 

! 증가하는 코드베이스 문제

코드베이스에서 확장성, 가독성 및 저반적 코드 품질은 시간이 지남에 따라 감소하게 된다.

그 이유는 코드베이스 규모가 커지고 있음에도 불구하고 유지관리 담당자가 쉽게 유지관리할 수 있는 구조를

적용하기 위한 적극적인 조치를 취하지 않기 때문이다.

 

모듈화를 통해서 유지관리 가능성을 개선하고, 이러한 문제를 방지할 수 있는 방식으로 코드베이스를 구조화하는 방법이다.

 

[모듈화]

 

모듈화는 코드베이스를 느슨하게 결합된 독립적인 부분으로 구성하는 방법이다.

각 부분이 모듈에 해당하며, 각 모듈은 독립적이며 명확한 역할을 한다.

 

하위 문제를 해결하기 위해 문제를 더 작고 쉬운 문제로 나누면, 대형 시스템 설계와 유지보수의 복잡성이 감소한다.

 

위 이미지는 다중 모듈 코드베이스에 종속 항목 그래프이며, 모듈화를 가정한 샘플 이미지이다.

 

 

위 이미지는 다중 멀티 모듈을 구현한 것으로, 기능별 모듈을 나누는 것에 집중하고 있다.

모듈화의 장점

 

<재사용>

- 코드를 공유하고 동일한 기반을 토대로 여러 앱을 빌드할 수 있다.

- 앱은 기능의 총합으로, 각 기능은 별도 모듈 형태로 구성된다. 

- 특정 모듈이 제공하는 기능은 특정 앱에 사용되거나 사용되지 않을 수도 있습니다.

 

<엄격한 공개 상태 제어>

- 모듈을 사용하면 코드베이스의 다른 부분에 노출할 내용을 쉽게 제어할 수 있다.

- 공개 인터페이스를 제외한 모든 항목을 internal 또는 private로 표시해서 모듈 외부에서 사용하지 못하도록 할 수 있다.

 

<맞춤설정 가능한 전송>

- 앱의 특정 기능을 조건부 또는 주문형으로 전송할 수 있도록 한다.

 

위의 대표적인 장점 이외에도, 확장성, 책임감, 캡슐화, 테스트 가능성, 빌드 시간의 이점을 준다.

긴밀히 결합된 코드베이스에서는 단일 변경사항이 관련 없어 보이는 코드 부분까지 연쇄적으로 바꿔놓을 수 있다.

적절히 모듈화 된 프로젝트는 관심사 분리의 원칙으로 결합을 제한한다.

이를 통해 참여자는 더 큰 자율성으로 더 많은 권한을 얻게 된다.

 

모듈화의 일반적인 문제

 

<지나친 세분화>

- 빌드 복잡성과 상용구 코드가 늘어남으로써 모든 모듈에서 일정량의 오버헤드가 발생

- 복잡한 빌드 구성으로 인해 모듈 간에 일관성 구성을 유지하기 어려움

 

<지나친 간소화>

- 반대로 모듈이 너무 커지면 하나의 모놀리식으로 끝날 수 있으며, 모듈의 이점을 놓칠 수 있음

- 작은 프로젝트에서는 데이터 영역을 단일 모듈 내에 넣어도 괜찮음

- 크기가 커지면 저장소와 데이터 소스를 독립형 모듈로 분리해야 함

 

<지나친 복잡성>

- 결정적 요소는 코드베이스 크기. 프로젝트가 특정 기준점 이상으로 확장될 것 같지 않으면 이점이 되지 않음