#1 Module
Java ํ๋ก์ ํธ๋ฅผ ์ํ ์ข
ํฉ ๋๊ตฌ. Java ํ๋ก์ ํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ, ์์ค ์ฝ๋์ ์ปดํ์ผใ๋น๋๋ฅผ ์ํํ๋ค.
#2 Artifact
#2-1 What (์ ์์ ์ ์)
Artifact๋ ์ฝ๊ฒ ๋งํด Maven์์๋ง ์ฐ๋(Maven์ ๊ณผ๊ฑฐ ์ธ๊ธฐ๋ก ์ธํด, ํ์ฌ๋ Maven์ด๋ ๊ด๋ จ ์์ด๋ ๊ทธ๋ฅ ๋ณดํต ๋ช
์ฌ์ฒ๋ผ ์ฐ์ธ๋ค) ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋จ์๋ค. ์ ํํ ๋งํ๋ฉด ์ด์ง ์ด๋ ค์ด๋ฐ, ์๋์ ์กฐ๊ฑด์ ์ ๋ถ(๊ต์งํฉ) ๋ง์กฑํ๋ ํ์ผ ํ๋๋ฅผ ์๋ฏธํ๋ค.
1. ํ์ผ์ ํ์(ํ์ฅ์)๊ณผ ๊ด๊ณ์์ด, ๋จ ํ๋์ ํ์ผ.
2. ํด๋น ํ์ผ์, 'Maven Repository'(#3)์์ 'GAV'(#4) ํ์์ผ๋ก ์์ฒญํ ์ ์์.
๋๋ถ๋ถ Java ์ฝ๋๋ฅผ ์ปดํ์ผํ ๊ฒฐ๊ณผ๋ฌผ์ธ .jar(์๋๋ก์ด๋์ฉ Artifact์ธ ๊ฒฝ์ฐ์๋ .aar) ํ์ผ์ด๋ค. ๋ฐ๊ฟ ๋งํ๋ฉด Artifact๋...
#2-2 ์ทจ๊ธ (๋ ๋ค๋ฅธ ์ ์)
๋ ๋ฆฝ์ ์ผ๋ก ๋น๋ใ๋ฐฐํฌใ์์กด์ฑ ๊ด๋ฆฌ๋ ์ ์๋ ์ต์ ๋จ์
๋ฐ๊ฟ ๋งํ๋ฉด Artifact๋ '๋
๋ฆฝ์ ์ผ๋ก ๋น๋·๋ฐฐํฌ·์์กด ๊ด๋ฆฌ๋ ์ ์๋ ์ต์ ๋จ์'๋ก ์ทจ๊ธ๋๋ค. ์๋ํ๋ฉด ํ๋์ ์ฝ๋ฉ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ํ์ ์์ผ๋ฏ๋ก, ๊ธฐ๋ฅ์ ใ๊ฐ๋
์ฑ์ ์ผ๋ก ์ชผ๊ฐค ์ ์๋ Artifact๋ฅผ ๊ตณ์ด ์ฌ๋ฌ Artifact๋ก ์ ์ชผ๊ฐ๊ณ ํต์งธ๋ก ์ปดํ์ผํ์ง๋ ์์ ํ
๋๊น ๋ง์ด๋ค.
'์ต์'์ ์๋ฏธ
๊ทธ๋ ๋ค๊ณ ๊ฐ๋ฅํ ํ ์ ๋ถ ์ชผ๊ฐ๋ฒ๋ฆฌ๋ฉด ์ญ์ผ๋ก ๊ฐ๋
์ฑ์ด ํ๋ฝํ ๊ฒ์ด๋ค. Artifact ๊ฐ๋ฐ์๋ค์ด ์์์(?) ์, ์ ์ ํ ๋จ์๋ก ์ชผ๊ฐ๋จ์ ๊ฒ์ด๋ค. '์ต์ ๋จ์'๋ผ๋ ๋ง์ ์๋ '์ต์'๊ฐ, ์ ๋ง ์ฌ์ ๋ป ๊ทธ๋๋ก์ '์ต์'๋ ์๋๋ผ๋ ์๊ธฐ๋ค.
#3 Maven Repository
Artifact๋ฅผ ์ ๊ณตํ๋ ๋ค์ํ ์๋ฒ๋ค์ ํต์นญํด Maven Repository๋ผ ๋ถ๋ฅธ๋ค. 'Artifact๋ฅผ ์ ๊ณต'ํ๋ค๋ ๊ฒ์์ ๋์น์ฑ๊ฒ ์ง๋ง, ์ด๋ฐ ์๋ฒ์๋ GAV ํ์์ผ๋ก ์์ฒญํ ์ ์๋ค. (์ด์ฐ ๋๋ ์๋ฒ์ด๋ฏ๋ก HTTP GET ์์ฒญ์ ํ๊ธด ํ์ง๋ง, ๊ทธ URL์ด GAV ๋ฌธ์์ด์ ์กฐํฉ์ด๊ธฐ์ ํด๋ผ์ด์ธํธ๊ฐ URL์ ๋ฐ๋ก ์์๋ ํ์๊ฐ ์๋ค. #5-2 ์ฐธ๊ณ ).
ํ์ฅ๋ ์ญํ
Maven์ด Java ๊ด๋ฆฌ ๋๊ตฌ๋ค ๋ณด๋, ์ฒ์์๋ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฅ์ฉ์ผ๋ก ์ฌ์ฉ๋์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ดํ ํ์ฅ๋์ด ๋ค๋ฅธ ์ธ์ด(JavaScript ๋ฑ)๋ ํ๋ซํผ(Android ๋ฑ)์ฉ Artifact๋ ์ ๊ณตํ๋ค.
์ฃผ์ํ ์
๊ตฌ๊ธ์ "Maven Repository"๋ผ๊ณ ์น๋ฉด ๋ฐ๋ก ๋์ค๋ Maven Repository๋ผ๋ ์ฌ์ดํธ๋ Maven Repository๊ฐ ์๋๋ค. ๋ค์ํ Maven Repository๋ค์ ์ธ๋ฑ์ค/๊ฒ์์ฉ ์น์ฌ์ดํธ๋ค. ๋น์ ํ์๋ฉด ์ํ๋ฅผ ๋ณผ ์๋ ์์ด๋ ๊ฐ์ข
๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ ์๋, '์ํ ๋ฆฌ๋ทฐ ์ฌ์ดํธ' ๊ฐ์ ๊ณณ์ด๋ค. ํ์กดํ๋ ์ฃผ์ Maven Repository๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด ํด๋น ์ฌ์ดํธ์ ํ์ URL์ธ ์ฌ๊ธฐ์์ ๋ณผ ์ ์๋ค.
#4 GAV
#4-1 What
"Artifact Coordinate"
= "GAV"
= "groupId : artifactId : version"
≈ "GAVCE"
(์ฐธ์กฐ: ๊ณต์ ์ค๋ช )
Artifact์ (Maven Repository ์) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ค. Artifact Coordinate๋ผ๋ ๋ง์ด ๋ ๊ฒฉ์(?)์๋ ํํ์ด์ง๋ง, ๋๋ถ๋ถ์ ์ฌ๋์ GAV๋ผ ๋ถ๋ฅธ๋ค. GAV๋ 3๊ฐ์ง ์์์ ์ ๊ธ์๋ฅผ ๋ด ์ถ์ฝ์ด๋ก, ๊ฐ๊ฐ์ ๋ํ ์ค๋ช
์ ์๋์ ๊ฐ๋ค.
#4-2 groupId
'G'์ ํด๋นํ๋ค. ์ด๋ฆName์ผ๋ก ์น๋ฉด ์ฑLast Name์ ํด๋นํ๋ค. ์ด๋ฐ ์์๊ฐ ์ ์กด์ฌํ๋๋ฉด ์ฒซ์งธ๋ก, ์ด๋ฆFirst Name์ด ๊ฐ์ ๊ฒฝ์ฐ ์ฑLast Name์ผ๋ก ๊ตฌ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค (์ฐ๋ฆฌ๋๋ผ๋ ์ฑ์ ์ข ๋ฅ๊ฐ ์ด๋ฆ์ ์ข ๋ฅ๋ณด๋ค ์ ๊ธฐ์, ์ฐ๋ฆฌ๋๋ผ ํ์ ์ผ๋ก๋ ์๋ฟ๋ ๋น์ ๊ฐ ์๋๊ธด ํ๋ค).
๋์งธ๋ก, '์ฑ'์ ํตํด์ Artifact์ ์ ์์(group)๊ฐ ๋๊ตฐ์ง ํ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ํ๋์ Maven Repository์์ groupId๋ ์ ์ผ(Unique)ํด์ผ ํ๋ค.
#4-3 artifactId
'A'์ ํด๋นํ๋ค. ์ด๋ฆName์ผ๋ก ์น๋ฉด ์ด๋ฆFirst Name์ ํด๋นํ๋ค. ์ฃผ์ํ ์ ์ artifactId ≠ artifact๋ผ๋ ๊ฒ์ด๋ค. 'artifact'๋ผ๋ ๋จ์ด๋ง ๊ณต์ ํ ๋ฟ ๋์ ๋ค๋ฅด๋ค. ๊ทธ๋ฅ artifactId๊ฐ ์๋๋ผ First Name์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ด ํธํ๋ค.
์ด์จ๋ , artifactId๋ ๊ฐ์ groupId ๋ด์์๋ง ์ ์ผ(Unique)ํ๋ฉด ๋๋ค. ๋ Artifact๊ฐ ์๋ก ๋ค๋ฅธ groupId์ฌ๋ artifactId๋ ๊ฐ์ ์ ์๋ค. ์ด๋ฆ์ด ๊ฐ์๋ ์ฑ์ด ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ์ฌ๋์ธ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค. ๋ฐ๋๋ก ์ฑ์ด ๊ฐ๋ค๋ฉด ์ด๋ฆ์ ๋ฐ๋์ ๋ฌ๋ผ์ผ ํ๋ค.
#4-4 version
'V'์ ํด๋นํ๋ค. ๋ง ๊ทธ๋๋ก Artifact์ ๋ฒ์ ์ด๋ค.
#4-5 GAVCE
"GAV"์ ๊ฐ๋ "CE"๋ฅผ ๋ํด Artifact Coordinate๋ฅผ ํํํ๊ธฐ๋ ํ๋ค. 'C'๋ Classifier(๋ถ๋ฅ์)๋ก, ๊ฐ์ GAV์ด์ง๋ง ๋ณํ(๊ฐ๋ น ํ
์คํธ ์ ์ฉ ๋ณํ, ๊ฒฝ๋ ๋ฒ์ ๋ณํ, ์ปดํ์ผ๋ ์ฝ๋ ๋์ ์ปดํ์ผ๋๊ธฐ ์ ์ ์์ค ์ฝ๋๊ฐ ๋ค์ด ์๋ ๋ณํ ๋ฑ)์ธ Artifact๋ฅผ ํ์ํ๊ธฐ ์ํ ๊ผฌ๋ฆฌํ๋ค. 'E'๋ Extension(ํ์ฅ์)์ด๋ค. jar, aar, pom, zip ๋ฑ.
#5 ์ค์ต
#5-1 GAV ์์
androidx.hilt : hilt-navigation-compose : 1.2.0
(groupId : artifactId : version)
์์ ๊ฐ์ Artifact๊ฐ ์๋ค๊ณ ์น์. ์ด๋ฅผ ๋ค์ด๋ก๋ ํด๋ณด๊ฒ ๋ค. ์ด์ฉํ Maven Repository์ Root URL์ (https://dl.google.com/dl/android/maven2/)๋ค. ์ฌ๋ด์ผ๋ก ํด๋น URL์ ์ ์ํด ๋ณด๋ฉด 404๊ฐ ๋ฌ๋ค. ์๋ง ์ ์ฅ์๊ฐ ์ธ๋ฑ์ค ํ์ผ๋ ์๊ณ , Directory Listing๋ ์ ๊ณตํ์ง ์๊ธฐ์, ์ ์ฅ์ ๊ด๋ฆฌ์๊ฐ Root URL ์์ฒญ ์ 404๋ฅผ ๋ฐํํ๊ฒ ์ค์ ํด ๋์์ ๊ฒ์ด๋ค.
#5-2 Artifact(GAV) URL
์ด GAV(androidx.hilt : hilt-navigation-compose : 1.2.0)๋ฅผ ์์ฒญํด ๋ณด๊ฒ ๋ค. ์ด ์์ฒญ์ฉ URL์ Artifact URL ๋๋ GAV URL์ด๋ผ ๋ถ๋ฅธ๋ค. ๊ณต์ ๋ฌธ์์ ๋ฐ๋ผ Artifact URL์ ์ ์ถํ๋ฉด ์๋์ ๊ฐ๋ค.
https://dl.google.com/dl/android/maven2/androidx/hilt/hilt-navigation-compose/1.2.0/hilt-navigation-compose-1.2.0.aar
์ด ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด Artifact๊ฐ ๋ค์ด๋ก๋๋๋ค.
#5-3 ์ค์ ํ์ผ
์ ๋งํฌ์์ ๋ค์ด๋ก๋ํ ํ์ผ์ด๋ค. ์ด ํ์ผ์ ํ์ฅ์๋ฅผ .zip์ผ๋ก ๋ฐ๊พธ๊ณ ์์ถ์ ํด์ ํด ๋ณด๋ฉด ์ปดํ์ผ๋ ์ฝ๋(.class ํ์ฅ์ ํ์ผ)๊ฐ ๋ค์ด์์์ ํ์ธํ ์ ์๋ค. ๋ง์ฝ, Classifier๊ฐ ์์ค ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ๋ณํ์ด์๋ค๋ฉด ์ปดํ์ผ๋ ์ฝ๋๊ฐ ์๋๋ผ, ์ปดํ์ผ๋๊ธฐ ์ ์ ์์ค ์ฝ๋๊ฐ ๋ค์ด์์์ ๊ฒ์ด๋ค.
#5-4 GAVCE ์์
๋ง์ฝ, ์ Artifact์ ๋ณํ์ด ์กด์ฌํ๊ณ ๊ทธ ๋ณํ์ด 'ํ
์คํธ์ฉ ๋ณํ'์ด๋ผ ํด๋ณด์. ํ
์คํธ์ฉ ๋ณํ์ ๊ฒฝ์ฐ Classifier๋ก "tests"๋ฅผ ์ฃผ๋ก ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น Artifact์ ํ์ฅ์๋ rar๋ผ ํด๋ณด์. ๊ทธ๋ ๋ค๋ฉด GAVCE๋ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
[GAV] androidx.hilt : hilt-navigation-compose : 1.2.0
[C] tests
[E] rar
์ด GAVCE์ Artifact URL์ ์ ์ถํด ๋ณด๊ฒ ๋ค. 'C'๋ ํ์ผ ์ด๋ฆ ์์ ๋ถ์ด๋ ๊ฒ ๊ท์น์ด๋ค. ๋ฐ๋ผ์, Artifact URL์ (https://dl.google.com/dl/android/maven2/androidx/hilt/hilt-navigation-compose/1.2.0/hilt-navigation-compose-1.2.0-tests.rar)๊ฐ ๋๋ค. ์ด URL์ ์์์ผ๋ก ๋ง๋ GAVCE์ ๊ธฐ๋ฐํ๊ธฐ์, ํด๋น URL ๋งํฌ๋ฅผ ๋๋ฌ๋ด๋ 404 ์๋ฌ๋ง ๋ฐ ๊ฒ์ด๋ค.
#5-5 Package์์ ์ฐ๊ด์ฑ
ํจํค์ง(Package): ํด๋ ํธ๋ฆฌ์ ๋ ผ๋ฆฌ์ ์ด๋ฆ. Artifact ๋ด๋ถ์์ .class ํ์ผ์ด ์ ์ฅ๋๋ ์ค์ ๊ฒฝ๋ก(ํด๋ ๊ตฌ์กฐ)์ ์ผ์น.
(* Artifact๊ฐ ์ปดํ์ผ๋ ์๋ฐ ์ฝ๋๋ฅผ ๋ณด์ ํ๋ Artifact๋ผ๋ ์กฐ๊ฑด ํ์ ์ค๋ช )
์ฌ๊ธฐ์ ๊ฐ์๊ธฐ Package๋ฅผ ์ค๋ช
ํ๋ ์ด์ ๋, Package์ ๊ฐ์ด GAV์ ๊ฐ๊ณผ ๊ด์ต์ ์ผ๋ก ์ฐ๊ด์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์์์ ์ค๋ช
ํ Artifact(#5-2)๋ฅผ ์๋ก ๋ค์ด๋ณด๊ฒ ๋ค. ์ Artifact๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํ๋ก์ ํธ์ ๋ฃ์๊ณ ์ด์ ์ฌ์ฉํ ์ผ๋ง ๋จ์ ์ํฉ์ด๋ค. import ๋ฌธ๋ง ์ฐ๋ฉด ๋์ด๋ค. ์ด import ๋ฌธ์ ์ด๋ป๊ฒ ์จ์ผ ํ ๊น? ์๋์ ๊ฐ๋ค.
import androidx.hilt.navigation.compose.hiltViewModel
๋ฌํ๊ฒ GAV ๊ฐ๊ณผ ๋ฎ์๋ค. ๋ง์น ์ฝ์์ด๋ผ๋ ํ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค. Artifact๋ฅผ ๋ฏ์ด์ ํ์ธํด๋ณด์. #5-3์ ์๋ ์ค์ ์์ ํ์ผ์ .zip ํ์ฅ์๋ก ๋ณ๊ฒฝํ๊ณ ์์ถ์ ํด์ ํ๋ฉด ์๋์ ๊ฐ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๊ฐ ๋์จ๋ค.

androidx > hilt > navigation > compose ํด๋๋ฅผ ๊ฑฐ์ณ HiltViewModel ํ์ผ์ด ์กด์ฌํ๋ค. ์ด๋ฐ ๊ตฌ์กฐ๋ก Artifact๋ฅผ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ์๋ฌด ์ฌํญ์ ์๋ค. ๊ทธ๋ฌ๋, Package๋ฅผ GAV์ ๋น์ทํ๊ฒ ์ง์์ผ๋ก์จ ์ด๋ Artifact์์ import ํ๋ ๊ฒ์ธ์ง๋ฅผ ์ง๊ด์ (์๊ฐ์ )์ผ๋ก ๋ณด์ผ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ฐ ๊ด์ต์ด ์๊ธด ๊ฒ์ด๋ค.
'๊นจ์ ๊ฐ๋ ๐ > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| SOLID ์์น (0) | 2025.12.01 |
|---|---|
| Gradle, ๋ฒ์ ์นดํ๋ก๊ทธ (0) | 2025.11.26 |
| [Kotlin] Coroutines Flow - Cold Flow์ Hot Flow (SharedFlow) (0) | 2024.08.07 |
| Unit Testing - Test double (0) | 2024.06.30 |
| ์์กด์ฑ ์ฃผ์ (Dependency Injection) (0) | 2024.06.20 |