#1 ๊ธฐ์กด์ ๋ชจ๋ ํธ์ถ ๋ฐฉ์
// in build.gradle
plugins {
...
}
android {
...
}
dependencies {
...
implementation(project(":datastore"))
implementation(project(":designsystem"))
}
์ด ๋ฐฉ์์ด ๋นํจ์จ์ ์ธ ์ด์ ๋ ๋ฌด์์ผ๊น?
- ๋ชจ๋ ์ด๋ฆ์ ์คํ ๋ง์ ํ๋ํ๋ ๊ธฐ์ตํด์ผ ํ๊ณ , ๋ชจ๋ ์ด๋ฆ์ ๋ณ๊ฒฝ์ด๋ผ๋ ํ๋ฉด ํ๋ก์ ํธ ๋ด ๋ชจ๋ implementation() ๋ฌธ์ ์ฐพ์๋ค๋๋ฉฐ ์๋ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค.
- ๊ฒ๋ค๊ฐ ์ฌ๋์ ์๋ ๋ณ๊ฒฝ์ ์ผ๋ถ ์ฝ๋์ ๋๋ฝ ๊ฐ๋ฅ์ฑ๊น์ง ์๋ค.
- ์๋ชป๋ ๋ชจ๋ ์ด๋ฆ์ ์ ๋ ฅํ์ ๋ build.gradle์ DSL(Gradle DSL)๋จ์์ ์ก์๋ด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, Gradle์ ๋น๋๊ฐ ์์๋๊ณ ๋์์ผ ๋ค๋ฆ๊ฒ ์๋ฌ๋ฅผ ์ธ์งํ๊ฒ ๋๋ค.
#2 Type-safe Project Accessors
Declaring Dependencies
build.gradle.kts plugins { `java-library` } repositories { mavenCentral() } dependencies { implementation("org.ow2.asm:asm:7.1") { because("we require a JDK 9 compatible bytecode generator") } } build.gradle plugins { id 'java-library' } repositories { mav
docs.gradle.org
Type-safe Project Accessors๋ Gradle 7.0๋ถํฐ ์ฌ์ฉํ ์ ์๋ Gradle์ ๊ธฐ๋ฅ์ด๋ค. #1์ ๋นํจ์จ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋์๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๊ธฐ๋ฅ์ธ์ง๋ ์๋์ ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ์ ์ ์๋ค.
์์ ์ฝ๋
// in build.gradle
// ๊ธฐ์กด ๋ฐฉ์
dependencies {
implementation(project(":utils"))
implementation(project(":api"))
}
---
// in build.gradle
// Type-safe Project Accessors๋ฅผ ์ฌ์ฉํ ๋ฐฉ์
dependencies {
implementation(projects.utils)
implementation(projects.api)
}
์ด ๋ฐฉ์์ด ํจ์จ์ ์ธ ์ด์ ๋ ๋ฌด์์ผ๊น?
- ๋ชจ๋ ์ด๋ฆ์ ์คํ ๋ง์ ํ๋ํ๋ ๊ธฐ์ตํ ํ์๊ฐ ์๋ค.
- ๋ชจ๋ ์ด๋ฆ ๋ณ๊ฒฝ ์ ํ๋ก์ ํธ์ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ผ๊ด(์๋)์ ์ผ๋ก ๋ณ๊ฒฝ๋๊ธฐ์, ์ด๋ฆ ๋ณ๊ฒฝ ์์ ์ด ์ผ๋ถ ์ฝ๋์์ ๋๋ฝ๋ ๊ฐ๋ฅ์ฑ์ด 0์ผ๋ก ์๋ ดํ๋ค.
- ์๋ชป๋ ๋ชจ๋ ์ด๋ฆ์ ์ ๋ ฅํ์ ๋, Kotlin DSL์ธ ๊ฒฝ์ฐ Kotlin ์ปดํ์ผ๋ฌ๊ฐ ์ฆ์ "Unresolved reference 'sampleIncorrectModuleName'."๊ณผ ๊ฐ์ ๋ฉ์์ง์ ํจ๊ป ์๋ฌ๋ฅผ ํ์ํด ์ค๋ค (์๊ฐ ์ ์ฝ).
์ฌ๋ด์ผ๋ก Groovy๋ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๊ธฐ์, Groovy DSL์ ์ธ ๋๋ (Kotlin DSL์ ์ธ ๋์ฒ๋ผ) ์ค์ ๋ ฅ๋ ๋ชจ๋ ์ด๋ฆ์ '์ฆ์' ์ก์์ฃผ์ง๋ ๋ชปํ๋ค๊ณ ํ๋ค.
#2-1 ํ์ฑํ ๋ฐฉ๋ฒ
Type-safe Project Accessors๋ฅผ ํ์ฑํํ๋ ค๋ฉด setting.gradle์,
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
๊ตฌ๋ฌธ์ ์ถ๊ฐํด ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ setting.gradle์ ์ด๋ ๋ถ๋ถ์ ์์น์์ผ์ผํ๋์ง๋ (๊ณต์ ๋ฌธ์์) ๋ช ํํ ๋์ ์์ง ์์๋ค.
๊ทธ๋์,
// in setting.gradle (of Now in Android)
/*
* Copyright 2021 The Android Open Source Project
* ...
*/
pluginManagement {
...
}
dependencyResolutionManagement {
...
}
rootProject.name = "nowinandroid"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
include(":app")
include(":app-nia-catalog")
include(":benchmarks")
include(":core:analytics")
include(":core:common")
include(":core:data")
...
check(JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) {
...
}
Now in Android ์์ค ์ฝ๋์ setting.gradle๋ฅผ ๋ณด๊ณ ๊ฐ์ ์ก์๋ค. ์์ ์ฝ๋์ ๊ฐ์ ์์น์ ๋๋ฉด ๋ ๊ฒ์ด๋ค.
#2-2 Accessor ํ๋กํผํฐ ์ด๋ฆ ๊ท์น
๊ธฐ์กด ๋ฐฉ์ → Type-safe Project Accessors
:commons:utils:some:lib → projects.commons.utils.some.lib
:some-lib → projects.someLib
:some_lib → projects.someLib
๋ชจ๋ ์ด๋ฆ์ ์๋ ์ผ๋ฐฅ ์ผ์ด์ค(some-lib)์ ์ค๋ค์ดํฌ ์ผ์ด์ค(some_lib)๋ ์นด๋ฉ ์ผ์ด์ค(someLib)๋ก ๋ณํ๋๋ค.
#3 ์ค์ฌ์ฉ ์์
์ค์ ๋ด ํ๋ก์ ํธ์ ์ฝ๋์ ์ฌ์ฉํด ๋ณด์๋ค.
Type-safe Project Accessors ๋ฏธ์ฌ์ฉ ์ฝ๋
// in build.gradle
plugins {
...
}
android {
...
}
dependencies {
...
implementation(project(":datastore"))
implementation(project(":designsystem"))
}
#1์ ์๋ ์ฝ๋๋ค.
Type-safe Project Accessors ํ์ฑํ
pluginManagement {
...
}
dependencyResolutionManagement {
...
}
rootProject.name = "swemo"
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
include(":app")
include(":database")
include(":designsystem")
...
Type-safe Project Accessors๋ฅผ ์ฌ์ฉํ ์ฝ๋
// in build.gradle
plugins {
...
}
android {
...
}
dependencies {
...
implementation(projects.datastore)
implementation(projects.designsystem)
}
์ฐธ๊ณ
'๊นจ์ ๊ฐ๋ ๐ > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์ปดํ์ผ ๊ด๋ จ ์ฉ์ด ์ ๋ฆฌ (0) | 2026.01.06 |
|---|---|
| SCSS์ ์๋ํ (0) | 2025.12.23 |
| ์์กด์ฑ ๊ทธ๋ํ(Dependency graph), ๋ฐ์ดํฐ ํ๋ฆ๋(Data-flow diagram) (0) | 2025.12.11 |
| SOLID ์์น (0) | 2025.12.01 |
| Gradle, ๋ฒ์ ์นดํ๋ก๊ทธ (0) | 2025.11.26 |