KOTLIN · 함수
타입 안전 빌더 (Type-Safe Builders)
수신 객체가 있는 람다를 활용하여 타입 안전한 빌더 패턴을 구현합니다. HTML, SQL, UI 등 구조적 DSL에 활용됩니다.
함수고급type-safe-builderdslreceiver-lambdaapply
핵심 설명
수신 객체가 있는 람다를 활용하여 타입 안전한 빌더 패턴을 구현합니다. HTML, SQL, UI 등 구조적 DSL에 활용됩니다.
Kotlin code
class Html {
private val children = mutableListOf<String>()
fun head(init: Head.() -> Unit) {
children += Head().apply(init).render()
}
fun body(init: Body.() -> Unit) {
children += Body().apply(init).render()
}
fun render() = "<html>
${children.joinToString("
")}
</html>"
}
class Head {
var title = ""
fun render() = " <head><title>$title</title></head>"
}
class Body {
private val elements = mutableListOf<String>()
fun h1(text: String) { elements += " <h1>$text</h1>" }
fun p(text: String) { elements += " <p>$text</p>" }
fun render() = " <body>
${elements.joinToString("
")}
</body>"
}
fun html(init: Html.() -> Unit) = Html().apply(init).render()
fun main() {
val page = html {
head { title = "Kotlin DSL" }
body {
h1("환영합니다")
p("타입 안전 빌더 예제입니다")
}
}
println(page)
}학습 팁
@DslMarker 어노테이션을 사용하면 중첩된 빌더에서 바깥 스코프의 함수 호출을 제한할 수 있습니다.
주의할 점
빌더 내에서 바깥 스코프의 메서드가 의도치 않게 호출될 수 있습니다. @DslMarker를 적용하여 스코프를 제한하세요.
자주 묻는 질문
타입 안전 빌더 (Type-Safe Builders)란 무엇인가요?
수신 객체가 있는 람다를 활용하여 타입 안전한 빌더 패턴을 구현합니다. HTML, SQL, UI 등 구조적 DSL에 활용됩니다.
타입 안전 빌더 (Type-Safe Builders) 학습 시 주의할 점은 무엇인가요?
빌더 내에서 바깥 스코프의 메서드가 의도치 않게 호출될 수 있습니다. @DslMarker 를 적용하여 스코프를 제한하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.