KOTLIN

[KOTLIN] 복잡한 객체를 생성하기 위한 DSL을 정의하라 (이펙티브 코틀린)

집한구석 2022. 7. 20. 21:26
728x90

DSL 

  • Domain Specific Language의 약자로 특정 도메인에 국한해 사용하는 언어
  • 코틀린을 통하여 DSL들을 접하는 경우가 많음

코틀린 DSL 예시

Gradle DSL

plugins {
    'java-library'
}

dependencies{
    api("junit:junit:4.12")
    implementation("junit:junit:4.12")
    testImplementation("junit:junit:4.12")
}

configurations{
    implementation{
        resolutionStrategy.failOnVersionConflict()
    }
}

Test DSL

class MyTests: StringSpec({
    "반환되는 길이는 String의 크기이어야 합니다." {
        "test string".length shouldBe 5
    }
    "startsWith 함수는 prefix를 반환해야 합니다."{
        "world" should startWith("wor")
    }
})
  • 특별한 도구가 필요 없고, 모든게 코틀린 문법으로 만들어진 DSL임
  • 코틀린 DSL 타입은 안전하고 type-safe 컴파일 타임이나 IDE에서 여러가지 힌트를 얻을수 있으며 대부분의 경우 이미 누군가가 만들어둔 DSL이지만, 직접 만들수도 있음

코틀린 DSL 특징 및 요약

  • DSL을 구현하면 사용법이 간단해지고, 코드 가독성이 올라감 하지만 내부적으로 어떠헥 동작하는지 파악하기는 어려움
  • DSL은 복잡한 자료 구조, 계측적인 구조, 거대한 양의 데이터인 상황에서 적절하게 활용하는 것을 권장함
  • 이미 만들어진 DSL이 다양하기 때문에, 적재적소에 활용하면 됨