아키텍쳐를 공부하려고 안드로이드 샘플 프로젝트를 분석하고 있었다.
안드로이드 공식 샘플로 유명한 "Now in Android"를 분석하고 있었는데 처음보는 내용을 발견했다.
Now in Android 구경하기
Gradle 파일의 dependencies 선언부가 내가 알던 내용과 다르게 생겼었다.
어떤 구조로 작성이 된 것인지 흥미로워 찾아보니 라이브러리 버전을 한 곳에서 관리하는 Version Catalog를 사용한 것이라고 한다.
그래서 Version Catalog에 대해 자세하게 알아보려고 한다.
Gradle 의존성 관리
안드로이드의 개발 트렌드는 멀티모듈이다.
그래서 모듈마다 build.gradle 파일이 생기기 마련이다.
각각의 build.gradle 파일에서 dependencies를 다음 사진과 같이 버전을 관리한다고 하면 어떤 일이 발생할까?
직접 버전을 적거나 lifecycle_version과 같이 변수로 버전을 관리하긴 했지만....
모듈화로 이렇게 build.gradle이 많은 경우에는 경우에는 어떻게 관리할 것인가!?
버전 하나 수정하면 저 많은 파일을 하나하나 수정해야 하는 수고를 하게 될 것이다.
그래서 유지보수가 간편해지도록 gradle의 의존성을 관리를 해야 한다.
Gradle 의존성을 관리하는 방법은 대표적으로 두가지가 있다.
- BuildSrc
- Version Catalog
BuildSrc
BuildSrc 디렉터리에 라이브러리 버전을 적어놓은 상수를 관리하는 파일을 생성해서 관리하는 방법이다.
이 글에서는 Version Catalog를 볼 것이니 자세한 내용은 아래 블로그에 자세히 설명되어있으니 참고하자.
Version Catalog
하나의 toml 파일에서 버전을 관리하는 방법이다.
BuildSrc와 동일하게 한 곳에서 버전관리를 할 수 있다는 점은 동일하지만,
toml 파일로 관리하는 것이 가독성도 향상되고 자동완성 등 편리한 기능을 제공한다.
Toml이란?
TOML(Tom's Obvious Minimal Language)은 읽기 쉬운 최소한의 구성 파일 형식을 목표로 삼고 있습니다. TOML은 해시 테이블에 분명하게 대응되도록 설계되어있습니다. TOML은 다양한 언어로 된 데이터 구조를 쉽게 구문분석할 수 있어야 합니다.
Toml 장점
- 하나의 파일로 여러 프로젝트 및 모듈의 버전 관리를 통합할 수 있습니다.
- 함께 사용되는 의존성들을 bundle로 묶어 선언할 수 있습니다.
- IDE 상에서 각 카탈로그 별로 자동 완성을 지원하는 등 여러 편리 요소들이 있습니다.
- 가독성면에서 뛰어납니다.
Version Catalog를 생성하는 방법은 New에서 Version Catalog를 눌러 libs.versions.toml 파일을 생성하면 된다.
파일을 생성하게 되면 libs.versions.toml 파일이 생성되며, 다음과 같이 작성되어있는 것을 볼 수 있다.
[versions] : 라이브러리 및 플러그인 버전을 가진 변수 정의
[libraries] : 라이브러리 정의
[plugins] : 플러그인 정의
[bundles] : 라이브러리를 한번에 묶어서 선언
versions에서 변수를 설정하고 버전을 작성하면 된다.
libraries와 plugin에서는 해당하는 라이브러리나 플러그인을 정의하면 된다.
이제 build.gradle에서 dependencies에 라이브러리를 작성할 때 다음과 같이 작성을 하면 된다.
짧게 설명을 하자면, implementation에 정의한 경로에서 라이브러리와 버전을 찾아주게 된다.
그리고 libs.versions.toml에서는 다음과 같이 작성을 하면 된다.
group을 통해 그룹으로 묶어 관리할 수 있으며, version.ref에 변수를 사용하여 해당하는 버전을 적용시킬 수 있다.
Version Catalog는 BuildSrc와 다르게 복잡하지 않고 가독성이 좋으며, 멀티모듈에 사용하기에 최적화 되어있다는게 장점이다.
멀티모듈을 사용해본 적은 아직 없지만, 구글의 공식 샘플에서 확인해보면 멀티모듈 프로젝트와 그렇지 않은 프로젝트 모두 Version Catalog를 사용하는 것을 보아 멀티모듈 뿐만 아니라 싱글모듈 프로젝트에서도 가독성이 좋고 추 후 확장성을 위해 알아두면 좋겠다고 생각했다.
'Android' 카테고리의 다른 글
[Android] Serializable, Parcelable (0) | 2023.07.02 |
---|---|
[Android] DataBinding (0) | 2023.06.18 |
[Android] Paging3 Frame Drop Issue (0) | 2023.04.23 |
[Android] Hilt - Android DI Library (0) | 2023.04.15 |
[Android] Room DB 사용해보기 (0) | 2023.04.08 |