[Android] 프로젝트로 배우는 Kotlin DSL + buildSrc

WonseokOh·2024년 8월 15일

BuddyCon

목록 보기
3/7
post-thumbnail

이전 글에서 클린 아키텍처 채택하고 모듈화에 대해서 작성을 하였습니다. 모듈화는 너무 세분화하지 않고 클린 아키텍처에 필수적으로 존재해야 하는 data, domain, presentation 계층만 생성하기로 하였습니다.
모듈을 생성하게 되면 각 모듈별로 빌드 관리를 위한 build.gradle 파일들이 생성되고 각 모듈에 필요한 플러그인, 라이브러리 등 정보들을 작성하게 됩니다.
모듈별로 빌드 스크립트를 각각 작성하고 유지보수 하기보다는 buildSrc 를 통해 더 쉽고 유지보수가 쉽도록 빌드 스크립트를 작성할 수 있습니다. 😎


kotlin DSL

요즘 안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 build.gradle이 아닌 build.gradle.kts가 생성될 수 있도록 체크하는 것이 있습니다. 기존에 빌드 스크립트는 Groovy라는 언어로 작성을 했으며 문제 없이 사용하였습니다. 하지만 kotlin DSL을 통해 빌드 스크립트를 작성했을 때의 여러 장점이 존재하면서 구글에서도 채택을 하게 되었습니다.

Kotlin DSL은 Koltin으로 작성된 도메인 특화 언어로 Gradle, Android 등 여러 영역에 사용되며 정적 타입 검사, 람다 함수, 확장 등 kotlin의 언어의 장점을 살려 직관적인 DSL을 구축할 수 있습니다.


Groovy

android {
    compileSdkVersion 34

    defaultConfig {
        applicationId "com.example.ows"
        minSdkVersion 26
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    // ...
}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.10.0'
}

Kotlin DSL

android {
    compileSdkVersion(34)

    defaultConfig {
        applicationId = "com.example.ows"
        minSdkVersion(26)
        targetSdkVersion(34)
        versionCode = 1
        versionName = "1.0"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
    }

    // ...
}

dependencies {
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.10.0")
}

Groovy 코드를 kotlin DSL로 변경하여 작성하였습니다.


Kotlin DSL 장점

Groovy로 잘 쓰고 있던 빌드 언어를 Kotlin DSL로 변경했기에 장점이 있다고 생각할 수 있을 것입니다. 사실 제 입장에서 Groovy를 많이 써보지 않았기에 오히려 Kotlin DSL로 바꿨을 때 더 익숙하여서 좋았지만, Kotlin DSL을 새롭게 공부를 해야하는 상황이신 분들에게는 굳이 꼭 해야되나 싶을 수 있을 것 같습니다.

  • 간결하고 가독성 높은 코드
    Kotlin 언어의 특징으로 간결하고 가독성이 높은 코드를 작성할 수 있다고 하지만, Groovy에 더 익숙하진 분들에게는 매력적인 이득은 아닐 것 같긴하네요

  • 타입 안정성
    이부분이 Kotlin의 장점이지 않을까 싶습니다. Kotlin으로 빌드 스크립트를 작성하게 되면 빌드를 하기 전 컴파일 시점에 IDE가 오류를 발견하여 수정할 수 있도록 도와줍니다. Groovy에서는 String 형을 입력해야 하는데 Int 타입을 입력했을 때 오류를 나타내주지 않지만, Kotlin DSL 은 미리 알려주어서 오류를 잡을 수 있습니다.

  • 유연성과 확장성
    Kotlin은 객체지향 프로그래밍과 함수형을 모두 지원하기에 유연하고 확장이 용이한 구조로 작성할 수 있습니다.😘


buildSrc 적용

buildSrc는 모듈화로 인한 여러 빌드 스크립트를 쉽고 유지보수를 용이하게 할 수 있도록 하는 방법 중 하나입니다. buildSrc 말고도 version catalog를 사용하거나 kotlin convention plugin을 적용해볼 수도 있지만 그나마 간단한 buildSrc를 BuddyCon 프로젝트에 적용을 하였습니다.
다른 프로젝트에 version catalog와 kotlin convention plugin을 사용했기에 나중에 블로그에 포스팅 해보도록 하겠습니다. 🤗

백문이 불여일견! buildSrc를 적용하는 방법에 대해 작성해보겠습니다.

1. buildSrc 폴더 및 build.gradle.kts 파일 생성

  • Project 뷰로 변경 후 프로젝트 루트 경로에 buildSrc 폴더를 생성합니다.
  • 이후 buildSrc 폴더 내에 build.gradle.kts 파일을 생성 후 다음과 같이 작성합니다.
  • Sync now 클릭하여 프로젝트와 Gradle 설정과 동기화를 시킵니다.

2. Dependency, Config 등 파일 생성

  • Sync now 이후에 buildSrc에 새로운 폴더를 생성하려고 하면 다음과 같이 팝업이 나타납니다.
  • src/main/kotlin 폴더를 생성한 후 Dependency나 Config와 같은 파일을 생성합니다.

  • Configs 파일을 생성해서 여러 모듈에서 사용될만한 SDK 정보 및 App 이름, Version Code, Name 들을 정리하였습니다.
  • 그리고 build.gradle.kts 에 다음과 같이 적용을 할 수 있게 됩니다.

  • Versions랑 Dependency object를 생성한 후 필요한 라이브러리들을 정의할 수 있습니다.
  • 이렇게 정의하면 다양한 모듈에서도 동일하게 사용할 수 있고 만약 라이브러리의 버전을 높이고 싶을때에도 일괄적으로 변경할 수 있습니다.



그래서 BuddyCon은?

Kotlin DSL + buildSrc 를 적용하여 모듈별로 빌드 스크립트 관리의 효율성을 높였으며 Groovy가 익숙하지 않는 저에게 Kotlin DSL을 사용하여 조금 더 친숙함을 느낄 수는 있었던 것 같습니다.
요즘 트렌드는 Version Catalog를 사용하거나 Kotlin Convention Plugin 을 하지만 프로젝트 규모 및 인지 부하가 너무 크지 않는 선에서 선택해도 무방할 것 같습니다! 😎


Reference

profile
"Effort never betrays"

0개의 댓글