Script를 사용할 수 있다. Kotlin Script가 가지는 이점은? Shell Script 보다는 쉬움 Type 안정성 외부 라이브러리 사용 가능 다른 스크립트 언어로도 가능하지만 Kotlin을 사용하면 더 좋은점? Kotlin 언어만 익숙한 경우에도 사용 가능 JVM 생태계와의 호환성 솔직히 성능은 살짝 애매하다 많은 연산 처리는 빠르겠지만 JVM 워밍업 시간이 필요하므로 워밍업 시간이 0에 가까운 Python이나 Node.js에 비해 느릴 수 있다.
// ... class Hello : CliktCommand() { val count: Int by option(help="Number of greetings").int().default(1) val name: String by option(help="The person to greet").prompt("Your name") override fun run() { repeat(count) { echo("Hello $name!") } } } Hello().main(args) $ kscript clikt.kts --count 3 Your name: kciter Hello kciter! Hello kciter! Hello kciter!
라이브러리 이용이나 다른 스크립트 불러오기는 직접 구현해야함 kotlin-main-kts 를 사용하는 경우 extension을 main.kts 로 지정하면 알아서 다 해준다 org.jetbrains.kotlin:kotlin-main-kts 추가 필요 의존성 관리, 다른 스크립트 불러오기 등 필요한 것들을 미리 다 구현해둠 import javax.script.ScriptEngineManager fun main() { val engine = ScriptEngineManager().getEngineByExtension("main.kts")!! engine.eval( """ val a = 2 val b = 3 println("a + b = ${'$'}{a + b}") """.trimIndent() // Output: a + b = 5 ) }
미리 값을 넣어두는 것도 가능하다. engine.put("a", 2) engine.put("b", 3) println("a + b = ${'$'}{a + b}") import javax.script.ScriptEngineManager fun main() { val engine = ScriptEngineManager().getEngineByExtension("main.kts")!! engine.eval( """ """.trimIndent() ) }
도 내부적으로 사용하고 있다. 분리한 이유는 훗날 멀티플랫폼에서 사용하기 위함이 아닐까 추측 중 (자료가 너무 없다…) Script Definition과 Scripting Host를 만들어야 한다 공식 홈페이지는 이 방식만 설명하고 있다 https://kotlinlang.org/docs/custom-script-deps-tutorial.html 코드가 너무 길어지므로 여기선 생략
것 같다! 다른 스크립트 언어를 대체할 수 있는가? 아직 많이 부족하다 팀 내부에서 협의하고 쓰는건 괜찮을지도? 팀이 코틀린을 주력으로 사용한다면… ex) Spring 서버팀, Android 팀 등 그렇지만 Embedded Scripting은 아직 쓰기엔 많이 애매하다 Stable 단계가 아니라는 점이 가장 크다 Usecase가 애매하다 빌드 타임을 줄이는 용도로 UI나 설정 등에는 쓸 수 있을지도? 게임 개발에서 Lua 같은 사례