프로그래밍/gradle

[gradle] dependency 추가할 때 compile 과 implementation의 차이

컴뀨 2022. 1. 12. 11:20

Compile vs Implementation

gradle springboot demo 프로젝트를 진행하면서 gradle dependency 관련해서 검색을 하다 보면 어떤 글에서는 implementation 을 사용하고 어떤 글에서는 compile 을 사용하는 경우가 있다. 하지만 gradle 7.3.2 버전으로 demo 프로젝트를 진행하면서 compile 로는 실행되지 않아서 무슨 차이가 있는지 알아보기로 했다.

공식 문서에는 꽤 간단하게 설명되어있지만, 정말 바로 알아들을 수 없었기에.... 검색을 통해서 해당 내용에 대해 정리하고자 한다.

A를 의존하고 있는 모듈이 B, B를 의존하고 있는 모듈이 C 라고 가정하자.

compile 과 implementation 비교

Compile or api 사용할 경우

A라는 모듈을 수정하게 되면, 이 모듈을 직접 혹은 간접 의존하고 있는 B와 C는 모두 재빌드 되어야 한다.

Implementation 사용할 경우

A라는 모듈을 수정하게 되면, 이 모듈을 직접 의존하고 있는 B만 재빌드 된다.

그런데, Gradle 3.0 부터는 Compile이 deprecated 되었다고 한다.

Implementation 장점

1. 빠르

수정이 발생하더라도 recompile(rebuild)을 적게 하니 소요 시간도 적다.

2. API 노출

compile을 사용하게 되면 연결된 모든 모듈의 API가 노출된다. implementation 을 사용하게 되면 이런 일이 없어진다.


[참고] https://docs.gradle.org/current/userguide/dependency_management_for_java_projects.html

[참고] https://stackoverflow.com/questions/44493378/whats-the-difference-between-implementation-api-and-compile-in-gradle