안드로이드의 최신 버전(저의 경우에는 Hedgehog)을 사용하고 계신다면, 프로젝트를 시작할 때의 기본 설정이 Compose에 최적화된 설정이라는 것을 알고 계실 겁니다.
기본 템플릿에는 Compose와 관련된 기본적인 Gradle 설정이 아래와 같이 되어 있습니다.
...
android {
...
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.4.3"
}
...
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.activity:activity-compose:1.8.2")
implementation(platform("androidx.compose:compose-bom:2024.01.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
}
저는 이러한 Gradle을 보다가 Compose의 implementation이 조금 다르다는 것을 눈치챘습니다. 바로 각각의 library의 Version이 정의되어 있지 않다는 것이였습니다.
어떻게 이런것이 가능하게 되었을까요??
BOM!!
Compose는 지금도 새로운 것들이 개발되며, 각각의 라이브러리들이 서로 다른 버전을 가지고 있습니다. 그러다보니 각각의 라이브러리들이 서로 호환되지 않을 수가 있습니다.
그렇기 때문에 Google은 이러한 라이브러리들의 버전을 한 곳에서 제어할 수 있는 방법을 고안해 냈습니다.
이를 지원하는 것이 바로 Compose BOM(Bill of Materials)입니다.
Bill of Materials는 개발자들이 만들어낸 단어는 아닙니다. 제품 생산에서 소요되는 원재로 또는 부품에 대한 상세 내역을 다룬 `자재명세서`를 의미합니다.
BOM은 모든 Compose 라이브러리의 버전을 관리하며, Stable한 버전에 대한 링크를 제공해 BOM의 버전을 수정하는 것만으로 모든 라이브러리가 새 버전으로 업데이트됩니다.
또한 BOM을 사용함으로써 이전에 존재했던 각각의 라이브러리들간의 버전 문제를 해결할 수 있습니다.
BOM을 사용하는 방법
BOM을 사용하는 방법은 매우 간단합니다. 아래와 같이 BOM을 implementation 해준 다음
val composeBom = platform("androidx.compose:compose-bom:2024.02.00")
implementation(composeBom)
androidTestImplementation(composeBom)
버전을 정의하지 않고 각각의 라이브러리를 implementation 해주면 됩니다.
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.material:material")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.activity:activity-compose")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
만약 하나의 버전만, 특정한 버전으로 사용하고 싶다면 아래와 같이 버전을 정의해주면 됩니다.
implementation("androidx.compose.material3:material3:1.1.0-alpha01'")
마무리하며
이렇게 해서 어떻게 Compose의 라이브러리들의 버전을 관리하는지 알아보았습니다.
BOM의 최신 버전은 아래에서 확인하실 수 있습니다.
'Android > Compose' 카테고리의 다른 글
Compose의 SnapShot 시스템 (0) | 2024.03.29 |
---|---|
Compose의 Remember, RememberSaverable 정복하기 (1) | 2024.03.06 |
내가 Compose로 만든 앱의 화면이 버벅거린다면? (1) | 2024.01.14 |
Compose의 Layout 단계 (0) | 2023.10.24 |
Compose에서의 State(상태) (1) | 2023.10.05 |