본문 바로가기
Android

[SWM Mobile] 모듈화 (Modularization, 5/26)

by 너츠너츠 2022. 5. 28.

주제: 클린 아키텍처를 위한 모듈화

 

저희 프로젝트는 App -> domain/feature -> common -> foundation으로 기준으로 layer를 나눴으며

총 5개의 모듈을 잡았으며 아래와 같이 모듈화 하기로 결정하였습니다. (추후에 추가될 예정)

 

세팅 외에도 모듈화와 관련된 3가지를 배울 수 있었습니다.

 

1. 의존성의 역전과 순환참조

모듈화의 이유는 의존성을 낮추기 위함도 포함되어 있습니다. 예를 들어 foundation -> home 과 같이 의존성 역전이 일어난다면 어떻게 될까요? 바로 순환참조가 나타나게 됩니다.

 

 

[Android Module] 순환참조 (Circular Dependency)란?

순환 참조란 두 가지 이상의 객체가 서로에 대한 참조 상태를 가지고 있을 때 발생하며, 순환 참조가 발생하게 되면 서로에 대한 참조가 해제되지 않기 때문에 메모리에서 유지되며 이로 인한

jgeun97.tistory.com

 

foundation에서 home에 대한 의존성을 설정하게 된다면 (foundation -> home) 이렇게 에러가 발생하게 됩니다.

 

2. 각 모듈이 어떤 종류의 모듈로 선택되어야 하는지 

ex) Java or Kotlin Library인지 Android Library여야 하는지

 

=> 핵심은 해당 모듈에 어떠한 라이브러리가 포함되는지에 대해 고민을 해야합니다.

여태까지 저는 라이브러리를 갖다 사용할 때 이것이 안드로이드 기능이 포함된 라이브러리인지, 순수 자바-코틀린 라이브러리인지 한 번도 고민해보지 않았기에 멘토님께서 프로젝트에 사용될 라이브러리들을 대충 고민해서 작성해보라고 하셨고 저희는 DI, Firebase, Test Library(JUnit, kotest..) 등등 나열하긴 했지만 이 기능들이 각각 다른 모듈에 들어간다할지라도 정확히 라이브러리가 어떤 것을 기반으로 만들어졌는지 몰라서 모듈의 종류를 선택할 수 없었습니다.

 

앞으로 라이브러리를 사용하게 된다면 단순히 기능을 보고 사용하는 것이 아닌 이것이 어떤 라이브러리인지 공부해보고 사용하는 습관을 들여야할 것 같습니다.

 

3. home 도메인에서 common을 거치지않고 foundation을 참조하려면 어떻게 해야하는지 

왼쪽은 common, 오른쪽은 foundation입니다.

 

home domain에서 StringUtil을 참고하려고 했을 때 의존성이 home -> common 이기 때문에 참조가 가능합니다.

하지만 NetworkUtil의 경우 home -> common -> foundation이기 때문에 참조가 불가능합니다. 

 

이걸 해결하려면?

기존의 implementation을 api로 변경해주신다면 

home domain에서 문제없이 NetworkUtil을 가져올 수 있습니다.

 

 

 

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

모듈이란? 안드로이드 공식홈페이지에 따른 설명에 의하면 아래와 같습니다. 모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니

jgeun97.tistory.com

 

반응형

댓글