Overview
compile 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-web'
testCompile 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
build.gradle 에 관한 설정을 검색하다보면 의존 라이브러리를 추가할 때 두가지 방법을 자주 봅니다.
compile 과 implementation 은 무슨 차이가 있을까요?
1. compile 은 상위 모듈까지 가져온다
compile 은 implementation 보다 더 많은 라이브러리를 빌드합니다.
예를 들어 다음과 같이 의존하는 관계의 프로젝트 세 개가 있다고 가정합니다.
myApp -> mySpring -> myJava
myApp 에서 mySpring 을 의존하고 mySpring 은 myJava 를 의존합니다.
이 때 compile 을 사용해서 mySpring 을 빌드하게 되면 mySpring 이 의존하고 있는 myJava 까지 함께 빌드합니다.
그래서 myApp 에서 myJava 모듈이 제공하는 API 까지 사용할 수 있습니다.
만약 myJava 를 직접적으로 사용할 필요가 없다면 필요하지 않은 API 들이 노출되고 빌드 시간도 오래 걸리기 때문에 비효율적인 행동이 됩니다.
대신 implementation 을 사용해서 빌드하면 mySpring 모듈만 가져오기 때문에 빌드 속도가 빠르고 필요한 API 만 노출해서 사용할 수 있습니다.
2. compile 은 deprecated 되었다
그리고 compile 은 deprecated 되고 api 로 대체되었습니다.
그러니 만약 상위 모듈까지 전부 가져오고 싶을 땐 compile 대신 api 를 사용하면 됩니다.
일반적인 경우에는 implementation 을 사용해서 빌드 속도를 향상시키는 것이 좋습니다.
Conclusion
implementation은 지정한 모듈만 가져오고compile,api는 상위 모듈까지 전부 가져옵니다.compile은 deprecated 되었고 대신api를 사용하면 됩니다.- 일반적인 상황에서는 빌드 속도가 빠르고 필요한 모듈만 가져오는
implementation을 사용하면 됩니다.
Reference
'Language > Java' 카테고리의 다른 글
| MacOS Java (Corretto) 설치 (with. asdf) (2) | 2022.11.26 |
|---|---|
| Java 의 Call by Value, Call by Reference (7) | 2022.01.31 |
| Java Enum 2편 : 여러가지 활용법 (0) | 2021.10.06 |
| Java Enum 1편 : Enum 기본적인 사용 (2) | 2021.09.15 |
| Java 코드를 짤 때 주의할 점 몇가지 (0) | 2021.08.21 |