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

2022. 7. 20. 21:26·KOTLIN
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이 다양하기 때문에, 적재적소에 활용하면 됨
저작자표시

'KOTLIN' 카테고리의 다른 글

[KOTLIN] SEALED CLASS  (0) 2022.07.27
[KOTLIN] 멤버 확장 함수의 사용을 피하라 (이펙티브 코틀린)  (0) 2022.07.27
[KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린)  (0) 2022.07.13
[KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린)  (0) 2022.07.10
[KOTLIN] 타입 파라미터의 섀도잉을 피하라 (이펙티브 코틀린)  (0) 2022.07.10
'KOTLIN' 카테고리의 다른 글
  • [KOTLIN] SEALED CLASS
  • [KOTLIN] 멤버 확장 함수의 사용을 피하라 (이펙티브 코틀린)
  • [KOTLIN] 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라 (이펙티브 코틀린)
  • [KOTLIN] 제네릭 타입과 VARIANCE 한정자를 활용하라 (이펙티브 코틀린)
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    cleancode
    docker
    IntelliJ
    코틀린
    Spring
    클린코드
    java
    프로그래머스
    AWS
    Elk
    자바
    Kafka
    이펙티브 코틀린
    go
    splunk
    ElasticSearch
    SQL
    엘라스틱서치
    이펙티브코틀린
    JPA
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[KOTLIN] 복잡한 객체를 생성하기 위한 DSL을 정의하라 (이펙티브 코틀린)
상단으로

티스토리툴바