콘텐츠로 이동

2024 07 15

2024-07-15

DSL (Domain Specific Language)

참고: https://myungpyo.medium.com/kotlin-dsl-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-5f95fddf00f9 참고: https://medium.com/@leeyh0216/scala%EB%A1%9C-dsl-%ED%9D%89%EB%82%B4%EB%82%B4%EB%B3%B4%EA%B8%B0-561c22869a62

  • 개요

    • 특정 도메인에 국한해 사용하는 언어
    • 아하,,, 엑스포 기억나지? 막 빌드옵션 지들이 만들어둔 용어로 쓰는거. 안드 빌드도 비슷하대
      android {
          compileOptions {
              sourceCompatibility JavaVersion.VERSION_1_8
              targetCompatibility JavaVersion.VERSION_1_8
          }
          kotlinOptions {
              jvmTarget = "1.8"
          }
          buildFeatures {
              viewBinding = true
          }
          hilt {
              enableExperimentalClasspathAggregation = true
          }
      }
      
    • 한정된 주제에서 반복적인 일 하는 것 보단 DSL을 만들어 제공하는게 좋다는데,,,
  • 특징
    • 잘 정의된 DSL은 자연어와 비슷해 가독성을 높일 수 있음
    • Scala/Kotlin에서는 다음과 같은 언어의 기능을 살림
      • 람다식
        • (Int, Int) -> Int
      • 고차함수
        • 함수를 파라미터로 갖거나
        • 함수를 반환하거나
      • 확장함수
    • Scala에서는 .이 없이도 함수 호출이 가능하니까 유리한 면이 있어!
  • 예제
    class SqlDSLTest {
    
      @Test
      def testSQL(): Unit ={
        import com.leeyh0216.scalaspark.Select._
    
        try{
          select ("a, b") from "tbl" and ("a is not null")
        }
        catch {
          case e: IllegalArgumentException => System.out.println(e.getMessage)
        }
      }
    }