Skip to content

19. DSL

VintageAppMaker edited this page Dec 22, 2018 · 1 revision

DSL(Domain-specific language)

  • 특정 애플리케이션이나 Software에서 사용할 목적으로 만든 간이언어.
  • kotlin에서는 확장함수를 사용하여 구현가능함.
  1. 소스코드

     fun main (args : Array <String>){
         // 일반적인 방법
         val p0 = Player()
         p0.name   = "Player 0"
         p0.status = Status()
         p0!!.status!!.job   = "Wizard"
         p0!!.status!!.level = 20
         println (p0)
    
         // 제일 간단함
         val p1 = Player("Player 1", Status("Archer", 23))
         println(p1)
    
         // DSL이 편리할 수도 있다.
         val p2 = MakePlayer {
             name = "Player 2 - " + Random().nextInt(200).toString()
             status {
                 job = "Paladin"
                 level = Random().nextInt(70)
             }
         }
    
         println (p2)
     }
     
     fun MakePlayer(block: Player.() -> Unit): Player = Player().apply(block)
     fun Player.status(block : Status.()-> Unit){
         status = Status().apply(block)
     }
     // data class
     data class Player(var name: String? = null,
                       var status: Status? = null)
     data class Status(var job: String? = null, var level: Int? = null)
    
  2. 디버깅 & 설명

  3. 왜 사용하는가?

    
    

  4. Android Studio에 적용하기