1. 주요 의존성 키워드
1.1 implementation
- 정의: 현재 모듈에서 사용되는 의존성을 추가한다.
- 특징: 의존성이 현재 모듈 내부에서만 사용되며, 다른 모듈에 노출되지 않는다.
- 사용 사례:
- 다른 모듈에서 사용할 필요 없는 라이브러리.
- 내부적으로만 사용하는 의존성.
- 예시:
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
}
spring-boot-starter-data-jpa는 현재 모듈 내부에서만 사용됩니다. 이를 의존하는 다른 모듈은 이 라이브러리에 접근할 수 없다.
1.2 api
1.3 compileOnly
1.4 runtimeOnly
2. 비교
| Scope | 컴파일 시 | 런타임 시 | 다른 모듈에 노출 |
|---|
implementation | O | O | X |
api | O | O | O |
compileOnly | O | X | X |
runtimeOnly | X | O | X |
3. 언제 무엇을 사용해야 할까?
- 현재 모듈에서만 사용되고, 다른 모듈에 노출되지 않아야 하는 경우:
- 다른 모듈에서도 함께 사용해야 하는 경우 (공유 라이브러리):
- 컴파일 시에만 필요하고 런타임에는 필요 없는 경우:
compileOnly
- 예: Lombok, 어노테이션 프로세서.
- 런타임 시에만 필요한 경우:
runtimeOnly
- 예: H2, MySQL Driver.