์›น UI/DB ๋ฅผ ์ ์šฉํ•œ ์˜จ๋ผ์ธ ์ฒด์Šค ๊ฒŒ์ž„์„ ๊ตฌํ˜„ํ•˜๋Š” ์ค‘ ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์„ ํ–ˆ๋‹ค. ์ฒ˜์Œ ์›น ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋ผ์„œ ์šฐ์„  ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋„ท๊ณผ ํฌ๋ฃจ๋“ค์ด ์ถ”๊ฐ€ํ•œ dependency ๋ฅผ ์šฐ์„  ๊ฐ€์ ธ์™€ ์ถ”๊ฐ€ํ–ˆ์—ˆ๋Š”๋ฐ ๋ฆฌ๋ทฐ์–ด์˜ ์งˆ๋ฌธ์„ ๋ฐ›๊ณ  ํ•ด๋‹น ๊ฐœ๋…์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

[์ฐธ๊ณ  ๋งํฌ](https://tomgregory.com/gradle-implementation-vs-compile-dependencies/#:~:text=The compile dependency configuration is,the same functionality as compile.&text=You should always use implementation,as compile is now deprecated.)

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•ด์„œ ๋‹ค์Œ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

  • compile ์€ Gradle 7.0 ๋ถ€ํ„ฐ depracated ๋˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ implementation ์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

Compile๊ณผ implementation์€ ๊ฑฐ์˜ ๊ฐ™์€ ๊ฐ€๋Šฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ๊ฐ€ ๋Œ€์ฒด ๋˜์–ด๋„ ์ƒ๊ด€์—†๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด implementation ์˜์กด์„ฑ ์ฃผ์ž…์€ ๋ฌด์—‡์ผ๊นŒ?

Java ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํ–‰์ด ๋  ๋•Œ 2๊ฐœ์˜ classpath๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. Complie classpath
  2. Runtime classpath

Gradle dependency๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์œ„ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค์ด ๋‚˜๋ˆ„์–ด์ง€๊ณ  ๋‘˜๋‹ค ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋“ค๊ณผ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋”ฐ๋กœ ์žˆ๋‹ค.

  1. compileOnly : compile classpath์—์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  2. runtimeOnly : runtime classpath์—์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  3. implementation : ์œ„ ๋‘๊ฐ€์ง€์— ๋ชจ๋‘ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

์œ„ ๊ฒฝ์šฐ๋“ค์„ ๋‚˜๋ˆ„์–ด์„œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ, ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— dependencies์™€ classpaths์˜ ๊ฐ„๊ฒฐํ•จ์œผ๋กœ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.