[Android] Kotlin DSL

Minji Jeongยท2022๋…„ 5์›” 1์ผ
0

Android

๋ชฉ๋ก ๋ณด๊ธฐ
9/39
post-thumbnail

Kotlin DSL โ”

๐Ÿ™„ ์ตœ๊ทผ ์ธํ”„๋Ÿฐ์—์„œ clean architecture ๊ฐ•์˜๋ฅผ ๋“ฃ๋‹ค๊ฐ€ Kotlin DSL์— ๋Œ€ํ•ด ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. Kotlin DSL์„ ์‚ฌ์šฉํ•˜๋ฉด gradle ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ kts๋กœ ๋ณ€๊ฒฝํ•˜๋˜๋ฐ, ๋งค์šฐ ์ƒ์†Œํ•˜๊ธฐ๋„ ํ•˜๊ณ  DSL์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์ด๋ ‡๊ฒŒ ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋จผ์ € DSL์€ Domain Specific Language์˜ ์•ฝ์ž๋กœ, ์ง์—ญํ•˜๋ฉด ํŠน์ • ๋ถ„์•ผ์— ์ตœ์ ํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‹ค. DSL์€ ๊ธฐ์กด์˜ ๋ช…๋ นํ˜• ์ฝ”๋“œ ๋Œ€์‹  ์„ ์–ธ์  ์ฝ”๋“œ ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค.

Kotlin DSL์€ ๊ฐ€๋…์„ฑ ์ข‹๊ณ  ๊ฐ„๋žตํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”ํ‹€๋ฆฐ์˜ ์–ธ์–ด์ ์ธ ํŠน์ง•์„ ์‚ฌ์šฉํ•˜์—ฌ Gradle ์Šคํฌ๋ฆฝํŒ…์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” DSL์ด๋‹ค. Kotlin DSL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด gradle ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋ฅผ gradle.kts๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๋Š”๋ฐ, kts๋Š” ์ฝ”ํ‹€๋ฆฐ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์˜๋ฏธํ•œ๋‹ค. ํ™•์žฅ์ž๋ช… ๋ณ€๊ฒฝ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด Kotlin DSL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

repositories {
    mavenCentral()
}

plugins {
    `kotlin-dsl` // java dsl ์„ค์ •
}

์šฐ๋ฆฌ๋Š” ์™œ Kotlin DSL์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? Kotlin DSL์˜ ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฝ”๋“œ๋ฅผ ๊ฐ•์กฐํ•  ์ˆ˜ ์žˆ๊ณ , ์ž๋™์™„์„ฑ์ด ์ง€์›๋˜๋ฉฐ, ์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ•์กฐ๋˜๊ณ  ๋ณ€์ˆ˜ ๋ฆฌํŒฉํ† ๋ง์ด ๊ฐ€๋Šฅํ•œ ํ–ฅ์ƒ๋œ ํŽธ์ง‘ํ™˜๊ฒฝ์„ ์ง€์›ํ•œ๋‹ค. ๋˜ํ•œ ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ์‚ฌ์šฉ ์‹œ ์ค‘๋ณต ์˜์กด์„ฑ ์„ ์–ธ์ด ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค. ๋‹จ์ ์„ ๊ผฝ์ž๋ฉด ๋นŒ๋“œ ์†๋„๊ฐ€ Groovy๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒƒ?

์ด๋Ÿฌํ•œ Kotlin DSL๊ณผ buildSrc๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

buildSrc โ”

๋นŒ๋“œ ๋กœ์ง์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” Gradle ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋‹ค. buildSrc์™€ Kotlin DSL์„ ์‚ฌ์šฉํ•ด์„œ ๋งค์šฐ ์ ์€ ๊ตฌ์„ฑ์œผ๋กœ ์ปค์Šคํ…€ ๋นŒ๋“œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๋กœ์ง์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Gradle์ด ์ˆ˜ํ–‰๋˜๋ฉด buildSrc ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ Gradle์€ ์ž๋™์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ๋’ค ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ classpath์— ๋„ฃ๋Š”๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์œ ์ง€๋ณด์ˆ˜, ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์ฝ”๋“œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋” ์‰ฝ๋‹ค.

์œ„ ํŒŒ์ผ์€ buildSrc ํ•˜์œ„์— ๋„ฃ์€ Dependency ํŒŒ์ผ์ด๋‹ค. Gradle์€ ์ž๋™์ ์œผ๋กœ ์œ„ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•œ ๋’ค, ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ classpath์— ๋„ฃ๋Š”๋‹ค. ๋‹ค๋งŒ buildSrc๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ „์ฒด ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์žฆ์€ ์ˆ˜์ •์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

buildSrc ๊ตฌ์„ฑ


References

https://beomseok95.tistory.com/367
https://developer.android.com/studio/build/migrate-to-kts?hl=ko#script_file_naming

profile
Mobile Software Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€