코틀린에서는 고차 함수(higher-order function)와 DSL(domain-specific language)을 사용하여 강력하고 표현력 있는 코드를 작성할 수 있습니다.
고차 함수 (Higher-Order Function)
고차 함수는 다른 함수를 매개변수로 받거나 함수를 반환하는 함수를 의미합니다. 이를 통해 함수를 일급 객체로 취급할 수 있어, 함수형 프로그래밍의 특징을 지원합니다.
매개변수로 함수 전달하기
// 람다식을 매개변수로 받는 고차 함수
fun higherOrderFunction(action: (Int, Int) -> Int): Int {
return action(3, 5)
}
fun main() {
// 람다식을 인자로 전달하여 호출
val result = higherOrderFunction { a, b -> a + b }
println(result) // 출력: 8
}
함수 반환하기
// 고차 함수
fun multiplyBy(factor: Int): (Int) -> Int {
// 함수를 반환
return { number -> number * factor }
}
fun main() {
// 함수를 반환받아 사용
val multiplyByTwo = multiplyBy(2)
val result = multiplyByTwo(5)
println(result) // 출력: 10
}
DSL (Domain-Specific Language)
DSL은 특정 도메인이나 문제 영역에 특화된 언어를 말합니다. 코틀린에서는 이러한 DSL을 쉽게 만들고 사용할 수 있습니다.
예제: HTML DSL
// HTML DSL을 위한 태그 클래스
class Tag(val name: String) {
val children = mutableListOf<Tag>()
val attributes = mutableMapOf<String, String>()
// 중첩된 태그를 추가하는 확장 함수
fun Tag.div(block: Tag.() -> Unit) {
val child = Tag("div")
child.block()
children.add(child)
}
}
// DSL을 사용하는 함수
fun html(block: Tag.() -> Unit): Tag {
val root = Tag("html")
root.block()
return root
}
fun main() {
// DSL을 사용하여 HTML 구조 생성
val document = html {
div {
attributes["id"] = "container"
div {
div {
// 중첩된 태그
}
}
}
div {
// 다른 레벨의 태그
}
}
// 생성된 HTML 구조 출력
println(document)
}
위의 예제에서는 HTML을 표현하기 위한 DSL을 만들었습니다. Tag 클래스는 태그의 구조를 표현하고, html 함수와 div 확장 함수를 사용하여 HTML 구조를 만듭니다.
DSL은 주로 특정 도메인에서 표현력이 높은 코드를 작성하고자 할 때 사용됩니다. 예를 들어, 안드로이드 앱에서 UI를 정의하는 DSL이나 데이터베이스 쿼리를 작성하는 DSL 등이 있습니다.
With ChatGPT
'Kotlin > 포스팅' 카테고리의 다른 글
코틀린 타입 안전한 빌더 사용 (0) | 2024.01.06 |
---|---|
코틀린 중위 함수를 사용해 플루언트 DSL 생성 (0) | 2024.01.06 |
코틀린 위임 표현 (0) | 2024.01.06 |
코틀린 커스텀 위임 만들기 (0) | 2024.01.06 |
코틀린 표준 위임들 (0) | 2024.01.06 |