#1 ์ด์ ๊ธ
Maven, Artifact, GAV
#1 Module๊ณต์ ํํ์ด์งGitHubJava ํ๋ก์ ํธ๋ฅผ ์ํ ์ข ํฉ ๋๊ตฌ. Java ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ, ์์ค ์ฝ๋์ ์ปดํ์ผใ๋น๋๋ฅผ ์ํํ๋ค. #2 ArtifactArtifact๋ ์ฝ๊ฒ ๋งํด Maven์์๋ง ์ฐ๋(Maven์ ๊ณผ๊ฑฐ ์ธ๊ธฐ
kenel.tistory.com
์์ ๊ฒ์๊ธ์์ ์ด์ด์ง๋ค.
#2 Gradle
#2-1 What
Maven์์ ํ์ํ ๋๊ตฌ๋ค. Gradle์ ๋จ์ ์ค ํ๋์ธ ์ฅํฉํจ ๋ฑ์ ๊ฐ์ ํ๋ค. Maven์ Artifact ๊ฐ๋ ๋ ๊ทธ๋๋ก ๊ณ์นํด ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ Maven Repository๋ฅผ Gradle๋ Maven๊ณผ ๊ฐ์ด ์ธ ์ ์๋ค.
#2-2 vs Maven DSL
Maven DSL โ Gradle DSL
groupId โ group
artifactId โ name
version โ version (๋์ผ)
groupId + ":" + artifactId โ module
Gradle์ Maven์ ๊ณ์นํ์ง๋ง, DSL์์๋ ์์ ๊ฐ์ด ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค. ๋์ฌ๊ฒจ๋ณผ ๊ฒ์ 'module'์ด๋ค. ๊ฐ๋ น, Maven์์ groupId๊ฐ "androidx.hilt"๊ณ artifactId๊ฐ "hilt-navigation-compose"์ธ Artifact๋ฅผ, Gradle์์ ๊ฐ์ด "androidx.hilt:hilt-navigation-compose"์ธ module์ ๊ฐ์ง๋ Artifact๋ผ๊ณ ํํํ ์ ์๋ค.
module์ ์์ฃผ ํน๋ณํ ์๋ฏธ๊ฐ ๊น๋ ๊ฒ์ ์๋๋ค. ๊ทธ๋ฅ ํํ ๋ฐฉ์์ ์ฐจ์ด์ผ ๋ฟ์ด๋ค. ๋ฐ๋ผ์, ์๋์ ์๋ (1)๊ณผ (2)๋ Gradle์์ ์์ ํ ๋์ผํ Artifact๋ก ์ทจ๊ธ๋๋ค.
(1) group = "androidx.hilt", name = "hilt-navigation-compose", version = "1.2.0"
(2) module = "androidx.hilt:hilt-navigation-compose", version = "1.2.0"
#2-3 vs Android Module
[Android] Module ๊ตฌ์กฐ
#1 Module?#1-1 Whatํ๋์ build.gradle์ ์ข ์๋ ์ฝ๋์ ๋ฒ์= ๋น๋์ ์ต์ ๋จ์= ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ๋จ์์๋๋ก์ด๋ ์ฑ์ Gradle๋ก ๋น๋๋๊ณ , ๊ทธ ๋น๋์ ๋ช ์ธ๋ build.gradle์ ์ ํ๋ค. ๋ชจ๋์ด build.gradle ํ
kenel.tistory.com
Artifact์ '๋ ๋ค๋ฅธ ์ ์'๋ฅผ ๋ณด๋ฉด, Android์์ ์ ์ํ 'Module'๊ณผ ์๋ฏธ๋ก ์ (์ถ์์ )์ผ๋ก ๊ฐ๋ค๋ ๊ฑธ ์ ์ ์๋ค. ๊ทธ๋ฐ ์ ์์ Gradle์ด group(groupId) ๋ฐ name(artifactId)์ ํฉ์ณ module์ด๋ผ ๋ถ๋ฅด๋ ๊ฑด (๊ธฐ์ตํ๊ธฐ ์ฝ๋ค๋ ์ธก๋ฉด์์) ์ข์ ์ผ์ด๋ค. Gradle์ module์ version ์ ๋ณด๋ง ์์ ๋ฟ์ธ Artifact ๊ทธ ์์ฒด๋ผ ํด๋ ๋๋๊น.
#3 ๋ฒ์ ์นดํ๋ก๊ทธ
#3-1 What
Version Catalogs
To access items in a version catalog defined in the standard libs.versions.toml file located in the gradle directory, you use the libs object in your build scripts. For example, to reference a library, you can use libs. , and for a plugin, you can use libs
docs.gradle.org
๋ฒ์ ์นดํ๋ก๊ทธ(Version Catalog)๋ ํ๋ก์ ํธ๊ฐ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Artifact)๋ค์ GAV ๊ฐ์ ๋ชจ์๋์ ํ์ผ์ด๋ค. Gradle 7.4 ๋ฒ์ ์์๋ถํฐ ๋์ ๋์๋ค. Android Project๋ Gradle์ ์ฌ์ฉํ๋ฏ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ผ ๋์ ๋์๋ค.
#3-2 ๋์ ๋ฐฐ๊ฒฝ
1. ํ๋์ ํ๋ก์ ํธ๋ง ๋ณด์๋ฉด, ๋ฒ์ ์ ๋ณด๋ฅผ gradle/libs.versions.toml ๋จ ํ๋๋ง ๋ชฐ์๋ฃ์ด ์ ์ง๋ณด์์ฑ ์ฆ๋
2. ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ ํธ๋ผ๋ฆฌ ๋น๊ตํ์๋ฉด, ์์กด์ฑ(๋ผ์ด๋ธ๋ฌ๋ฆฌ) ์ ๋ณด ๊ธฐ์ ์ ์ํ ์ฅ์๋ฅผ gradle/libs.versions.toml๋ก ์ฝ์(ํ์คํ)ํ๋ ํจ๊ณผ
#3-3 TOML ํ์ผ ํ์
JSON์ฒ๋ผ ํค-๊ฐ ์์ ์ ์ฅํ๋, ์ค์ ํ์ผ ์์์ด๋ค. TOML ์์์ด ๋ฒ์ ์นดํ๋ก๊ทธ ํ์ผ์ ์์์ผ๋ก ์ฑํ๋ ๊ฒ์, ์๋ง ๋ค๋ฅธ ์์๋ค์ ๋นํด ๊ฐ๋ ์ฑ์ด ํ๋ฅญํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ด๋ค.
#3-4 ๊ตฌ์กฐ
[versions] # ๋ฒ์ ๊ฐ ๊ธฐ์
ktx = "1.9.0"
androidGradlePlugin = "7.4.1"
...
[libraries] # Artifact์ GAV ๊ฐ ๊ธฐ์
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }
...
[plugins] # Gradle Plugin์ id ๋ฐ ๋ฒ์ ๊ฐ ๊ธฐ์
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
...
๊ตฌ์กฐ๊ฐ ์ด๋ค์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํ, ๋ฒ์ ์นดํ๋ก๊ทธ ํ์ผ(libs.versions.toml)์ ์์๋ค.
Gradle Plugin์ ๊ฒ์ผ๋ก๋ GAV๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก (= ๋ด๋ถ์ ์ผ๋ก ) Artifact๋ค(= GAV๊ฐ ์๋ค). ์ฐ๋ฆฌ(ํ๋ก๊ทธ๋๋จธ)๊ฐ ํ๋ฌ๊ทธ์ธ id ๋ฐ ๋ฒ์ ๊ฐ์ผ๋ก ํธ์ถํ๋ฉด, Gradle์ด ์์์ ๋งคํ๋ GAV๋ก Artifact๋ฅผ ๋ค์ด๋ก๋ํด์ ๊ฐ์ ธ์จ๋ค.
GAV ๊ฐ์์ "version"์ด ์๋๋ผ "version.ref"(= version reference)๋ผ๋ ํค๊ฐ ์ฐ์ธ ๊ฒ์, [versions]์ ์๋ ๊ฐ์ ์ฐธ์กฐ(reference)ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๊ทธ๋ฅ ์๋์ฒ๋ผ ์จ๋ ๋๋ค. ๋ค๋ง, ์ ์ง๋ณด์์ฑ์ ์๊ฐํด ์ง์ํ์.
androidx-ktx = { group = "androidx.core", name = "core-ktx", version = "1.9.0" }
#4 ๊ธฐ์กด ๋ฐฉ์ โ ๋ฒ์ ์นดํ๋ก๊ทธ
๋ฒ์ ์นดํ๋ก๊ทธ๋ก ๋น๋ ์ด์ | Android Studio | Android Developers
Gradle ๊ตฌ์ฑ ํ์ผ์ Gradle ๋ฒ์ ์นดํ๋ก๊ทธ๋ก ์ด์ ํฉ๋๋ค.
developer.android.com
์๋๋ก์ด๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ๋ค. ๊ณต์ ๋ฌธ์์ ์ ์ ๋ฆฌ๋์ด ์๋ค.
#5 ๋ฒ์ ์นดํ๋ก๊ทธ โ ๊ธฐ์กด ๋ฐฉ์
#4์ ์ญ์์ด๋ค.
'๊นจ์ ๊ฐ๋ ๐ > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์์กด์ฑ ๊ทธ๋ํ(Dependency graph), ๋ฐ์ดํฐ ํ๋ฆ๋(Data-flow diagram) (0) | 2025.12.11 |
|---|---|
| SOLID ์์น (2) | 2025.12.01 |
| Maven, Artifact, GAV (0) | 2025.11.25 |
| [Kotlin] Coroutines Flow - Cold Flow์ Hot Flow (SharedFlow) (0) | 2024.08.07 |
| Unit Testing - Test double (0) | 2024.06.30 |