일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Coroutine
- Hilt
- Kotlin
- relay
- TEST
- Gradle
- Compose
- 코루틴
- Rxjava
- AWS
- pandas
- 백준
- 코드포스
- 프로그래머스
- architecture
- MyVoca
- GitHub
- MiTweet
- 쿠링
- android
- Codeforces
- Python
- boj
- livedata
- activity
- 암호학
- ProGuard
- androidStudio
- Coroutines
- textfield
- Today
- Total
이동식 저장소
implementation vs. api 본문
안드로이드에서는 build.gradle
의 dependencies
블럭 안에 의존성을 추가할 수 있다. 보통 implementation
을 사용하여 의존성을 구성한다.
implementation 'androidx.compose.material3:material3:1.4.3'
이번 글에서는 implementation
의 정확한 의미를 알아보고, 또다른 구성 방법인 api
에 대해서도 알아보겠다.
implementation
의존성을 compile classpath에 추가하고, build output에도 포함한다. 하지만 다른 모듈에서 implementation
으로 구성한 의존성을 컴파일 시간에 참조할 수는 없다. 컴파일 시간이라는 말이 어렵다면 코드를 작성할 때라고 이해해도 된다. 즉 코드를 작성하고 컴파일할 때 참조할 수는 없다는 것이다.
당연히 런타임 시간에는 다른 라이브러리도 해당 의존성이 존재함을 인지할 수 있다. 예를 들어 모듈 A가 의존성 b를 implementation
으로 구성했고, app 모듈에서 A를 implementation
했다고 하자. app 모듈은 컴파일 시간에는 b의 존재를 알 수 없다. 하지만 런타임 시간에는 A의 빌드 결과물에 b가 포함되므로 자연스럽게 b의 존재를 알게 된다. 물론 app에서 A에 포함된 b를 참조할 방법은 없다. app에서 b를 직접 구성하지 않는 한.
아래에서 살펴볼 api
대비 빌드 성능이 월등히 좋다(significant improvements). 그 이유는 다시 컴파일하는 모듈의 수가 크게 적기 때문이다. 예를 들어 특정 모듈의 external API가 바뀌었다면, Gradle은 해당 모듈과 그 모듈에에 직접 의존하는 모듈만 다시 컴파일한다. External API는 외부에서 참조할 수 있는 모든 클래스와 함수, 패키지를 의미한다. 위의 예시에서 의존성 b의 API가 바뀌었다면, b와 A만 다시 컴파일되고 app은 컴파일되지 않는다.
특별한 이유가 없다면 implementation
을 사용해야 한다. 원문에서는 이렇게 표현하고 있다.
Most app and test modules should use this configuration.
api
의존성을 compile classpath와 build output에 포함하며, 이 모듈을 참조하는 상위 모듈에서도 해당 의존성을 컴파일 시간에 참조할 수 있다. 위의 예시에서 b를 api
로 구성한다면 app 모듈에서도 b를 직접 참조할 수 있다.
그럼 implementation
보다 좋은 거 아니냐고 할 수도 있는데, 빌드 시간이 늘어날 수 있기 때문에 주의해서 사용해야 한다(you should use it with caution). 해당 의존성을 상위 모듈에 노출해야 할 이유가 있을 때에만 사용해야 한다. 그 이유는 api
로 구성한 의존성의 external API가 바뀌면, 해당 모듈을 참조하는 모든 모듈이 다시 컴파일되기 때문이다.
해당 의존성을 상위 모듈에 노출해야 하는 경우에만 api
를 사용하고, 그 외의 일반적인 경우에는 implementation
을 사용하자. 나는 보통 앱에서 정의한 모듈(core, feature 등)만 api
로 구성하고, 외부 라이브러리는 거의 implementation
으로만 구성한다.
더 읽어보기
Add build dependencies | Android Studio | Android Developers
Learn how to add build dependencies using the Gradle build system in Android Studio.
developer.android.com
'Secondary > Gradle' 카테고리의 다른 글
클래스 충돌 에러가 날 때는 (0) | 2023.04.26 |
---|---|
Kotlin jvmTarget (0) | 2023.03.25 |
sourceCompatibility vs. targetCompatibility (0) | 2023.03.24 |
[Gradle] Version Catalog로 라이브러리 관리하기 (0) | 2022.11.19 |
[Android] Gradle 테스트 실행 커맨드 (0) | 2022.10.05 |