api VS implementation
- 의존 라이브러리 추가 시 둘중 선택을 할 수 있음
api : 의존 라이브러리 수정 시 본 모듈에 의존하고 있는 모든 모듈들 또한 재빌드
- A(api) ← B ← C 의 경우 C에서 A 접근 가능
- A 수정 시 B, C 모두 재빌드 → 오래 걸린다.
implementaiton: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- A(implementation) ← B ← C 의 경우 C 에서 A 를 접근할 수 없음
- A 수정 시 B 까지 재빌드
- 빠르다.
- API노출이 되지 않는다.
- 권장
의존성 옵션들
- implementation: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- 본 모듈을 의존하는 모듈은 해당 라이브러리의 api 를 사용할 수 없음
- compile: 의존 라이브러리 수정시 본 모듈을 의존하는 모듈들도 재빌드
- 본 모듈을 의존하는 모듈들도 해당 라이브러리의 api 를 사용할 수 있음
- compileOnly: compile 시에만 빌드하고 빌드 결과물에는 포함하지 않음
- runtimeOnly: runtime 시에만 필요한 라이브러리인 경우
- annotationProcessor: annotation processor 명시 (gradle 4.6)