주제: 클린 아키텍처를 위한 모듈화
저희 프로젝트는 App -> domain/feature -> common -> foundation으로 기준으로 layer를 나눴으며
총 5개의 모듈을 잡았으며 아래와 같이 모듈화 하기로 결정하였습니다. (추후에 추가될 예정)
세팅 외에도 모듈화와 관련된 3가지를 배울 수 있었습니다.
1. 의존성의 역전과 순환참조
모듈화의 이유는 의존성을 낮추기 위함도 포함되어 있습니다. 예를 들어 foundation -> home 과 같이 의존성 역전이 일어난다면 어떻게 될까요? 바로 순환참조가 나타나게 됩니다.
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' 카테고리의 다른 글
[Firebase] Android Gradle 연동 문제 - build gradle plugin id com.google.gms:google-services (0) | 2022.05.31 |
---|---|
[Android Module] 순환참조 (Circular Dependency)란? (0) | 2022.05.29 |
[Android Module] Android 모듈화 왜 하는 걸까? (0) | 2022.05.28 |
Software Maestro OSS 모바일 팀에 참여하다. (0) | 2022.05.28 |
Activity 생명주기(Lifecycle) (0) | 2022.05.08 |
댓글