๐ ์ต๊ทผ ์ธํ๋ฐ์์ 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๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํธ๋ฆฌํ๊ฒ ์์กด์ฑ์ ๊ด๋ฆฌํ ์ ์๋ค.
๋น๋ ๋ก์ง์ ํฌํจํ ์ ์๋ Gradle ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ค. buildSrc์ Kotlin DSL์ ์ฌ์ฉํด์ ๋งค์ฐ ์ ์ ๊ตฌ์ฑ์ผ๋ก ์ปค์คํ ๋น๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ํ๋ก์ ํธ์์ ์ด ๋ก์ง์ ๊ณต์ ํ ์ ์๋ค.
Gradle์ด ์ํ๋๋ฉด buildSrc ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌํ๋์ง ์ฒดํฌํ๋๋ฐ, ์ด ๊ฒฝ์ฐ Gradle์ ์๋์ ์ผ๋ก ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ํ
์คํธํ ๋ค ๋น๋ ์คํฌ๋ฆฝํธ์ classpath์ ๋ฃ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ง๋ณด์, ๋ฆฌํฉํ ๋ง ๋ฐ ์ฝ๋ ํ
์คํธ๊ฐ ๋ ์ฝ๋ค.
์ ํ์ผ์ buildSrc ํ์์ ๋ฃ์ Dependency ํ์ผ์ด๋ค. Gradle์ ์๋์ ์ผ๋ก ์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ํ
์คํธํ ๋ค, ๋น๋ ์คํฌ๋ฆฝํธ์ classpath์ ๋ฃ๋๋ค. ๋ค๋ง buildSrc๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ ์ฒด ํ๋ก์ ํธ์ ๋น๋ ์บ์๊ฐ ๋ฌดํจํ๋๊ธฐ ๋๋ฌธ์ ์ฆ์ ์์ ์ ํผํด์ผ ํ๋ค๊ณ ํ๋ค.
https://beomseok95.tistory.com/367
https://developer.android.com/studio/build/migrate-to-kts?hl=ko#script_file_naming