[kotlin] 코틀린에서의 함수형 디자인 패턴 활용 사례
함수형 프로그래밍은 불변성, 고차 함수, 람다 식 등의 기능을 중심으로 하는 프로그래밍 패러다임입니다. 코틀린은 함수형 프로그래밍을 지원하며, 다양한 함수형 디자인 패턴을 활용할 수 있습니다.
이번에는 코틀린에서 함수형 디자인 패턴을 어떻게 활용하는지에 대해 알아보겠습니다.
1. 불변성 (Immutability) 활용
코틀린은 불변성을 지향하는 언어로, val
키워드를 사용하여 변수를 선언하면 값을 재할당할 수 없게 됩니다. 이를 활용하여 함수형 디자인 패턴 중 하나인 “Unchangeable”을 구현할 수 있습니다.
예시:
data class Student(val name: String, val age: Int)
fun main() {
val student = Student("John", 25)
// student.name = "Mike" // 컴파일 오류, 값을 변경할 수 없음
}
2. 고차 함수 (Higher-Order Functions) 활용
코틀린은 고차 함수를 지원하여 함수를 인자로 받거나 반환할 수 있습니다. 함수형 디자인 패턴 중 “Decorator”나 “Strategy”와 같은 패턴을 구현할 때 고차 함수를 활용할 수 있습니다.
예시:
fun decorateWithBorder(text: String): String {
return "--- $text ---"
}
fun decorateWithStars(text: String): String {
return "*** $text ***"
}
fun decorateString(text: String, decorator: (String) -> String): String {
return decorator(text)
}
fun main() {
val text = "Hello, Kotlin!"
println(decorateString(text, ::decorateWithBorder)) // --- Hello, Kotlin! ---
println(decorateString(text, ::decorateWithStars)) // *** Hello, Kotlin! ***
}
3. 람다 식 (Lambda Expressions) 활용
람다 식은 코드 블록을 함수 인자로 전달하는 간결한 방법을 제공합니다. 이를 활용하여 함수형 디자인 패턴 중 “Lambda”를 구현할 수 있습니다.
예시:
fun List<Int>.customSum(selector: (Int) -> Int): Int {
var sum = 0
for (item in this) {
sum += selector(item)
}
return sum
}
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val sum = numbers.customSum { it * 2 }
println("Custom sum: $sum") // Custom sum: 30
}
위 예제에서 customSum
함수는 람다 식을 활용하여 리스트의 원소에 사용자 정의 연산을 적용하는 함수형 디자인 패턴을 보여줍니다.
함수형 프로그래밍을 통해 코틀린에서 다양한 함수형 디자인 패턴을 적용할 수 있으며, 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.
이상으로 코틀린에서의 함수형 디자인 패턴 활용 사례에 대해 살펴보았습니다.