Android

[다시 만들어보는 클린아키텍쳐] 모듈분리 편

최데브 2024. 7. 25. 00:10

클린아키텍쳐가 유행한지도 이제 꽤 시간이 지난 것 같다.

하지만 여전히 현업에서도 많이 쓰이고 있고 시간이 흐를수록 더 관리하기 편하고

깔끔한 구조로 변화해가는듯하다.

 

최근에 보이는 nowinandroid 나 드로이드나이츠 앱을 참고하며 내가 필요한 부분만 취해서

새롭게 샘플앱을 구성해보려한다.

 

단발성으로 끝나는것이 아닌 지속적으로 몇년이고 업데이트 할 사항이 생긴다면

추가하고 리펙토링도 진행하며 관리해나갈 목적으로 레포를 만들었다.

 

그럼 프로젝트를 구성하는 첫번째 발걸음인 모듈 분리를 해보자.

참고로 클린아키텍쳐라고 꼭 모듈을 분리해야하는건 아니다.

다만 분리를 하면 좀 더 강력하게 코드 관심사를 분리 시킬 수 있다.

초기에 설정해야하는 일들이 꽤나 복잡하지만 해두고나면 코드를 보기에도 훨씬 편하다.

 

모듈분리

 

모듈을 분리한다는게 무슨 말일까

쉽게 말하면 하나의 덩어리로 이루어진 앱을 담당 영역별로 쪼개고

필요한 곳에 블럭을 끼워서 하나의 앱을 만들기 위한 과정이다.

 

그럼 이렇게 하는 이유는 뭘까?

1. 관심사 분리로 인해 의존성을 줄일 수 있다

-> 단일 모듈일때는 개발자의 실수에 의해 클린아키텍쳐 의존성을 위배 할 수도 있다. 그러나 멀티 모듈을 사용하면 build.gradle에서 추가하지 않으면 호출조차 하지 못하기 때문에 실수로라도 의존성을 위배하지 않게 된다. 다만 설계를 처음부터 잘해둬야한다.

2. 빌드 시간이 감소될 수 있다. 빌드를 할때 변경된 모듈만 빌드를 해서 시간 감소를 이끌어낼 수 있다.

3. 코드 재사용성이 높다. 어떤 모듈을 만들어놨는데 그 모듈의 기능을 다른 곳에서도 써야한다면 라이브러리 추가하듯 모듈을 추가하면 그대로 재사용 할 수 있다.

4. 대규모 프로젝트에서 모듈별로 나눠서 일을 진행한다면 영향을 주지 않으면서 독립적으로 작업이 가능해진다.

이 외에도 여러 장점들이 있을 것이다.

 

그럼 모듈을 만들어보자.

 

1. 아래 사진처럼 New Module 을 눌러보자.

 

2. 템플릿을 선택하고 모듈을 만들 수 있다. 왼쪽에 있는건 그냥 탬플릿일뿐이고 내용물이 바뀌면 같이 바뀌는것이니

절대적인건 아니다. Android Library 를 선택해서 만들면 크게 바꿀게 없어서 그냥 이렇게 만들어서 쓴다.

추가로 알아야할것은 Module name 인데 :feature:search 로 만들면 feature 라는 모듈이 생기고 그 아래에 search 라는 하위 모듈이 생긴다. 또 다시 :feature:main 으로 만들면 feature  모듈 아래에 main 이라는 하위 모듈이 추가된다.

 

3. 이런식으로 관심사별로 분리해서 모듈들을 구성하며 된다. 프로젝트마다 구성방식은 조금씩 차이가 있으며 여러 코드들을 참고하거나 본인이 판단해서 만들면된다.

 

4. 만약 본인이 :feature:main로 모듈을 만들었다면 아래 같은 방식으로 모듈을 추가할 수 있다.

추가하는 위치는 추가해주고 싶은 모듈의 build.gradle  dependencies 안에 넣어주면 된다.

implementation(project(mapOf("path" to ":feature:main")))
or
implementation(projects.feature.main)

 

다음은 이 모듈들의 의존성을 편하게 관리하게 해주는 build-logic 에 대해 알아보겠다.

 

반응형