코틀린에서 함수 타입은 함수를 값으로 다룰 수 있도록 하는 개념입니다. 함수 타입은 함수의 시그니처를 표현하며, 변수나 매개변수 등에 할당되거나 전달될 수 있습니다. 함수 타입을 사용하면 고차 함수를 정의하거나 함수를 다룰 때 유연성을 제공합니다.
함수 타입의 기본 형식
코틀린에서 함수 타입은 (매개변수 타입) -> 반환 타입의 형식을 갖습니다. 여기서 매개변수 타입은 함수가 받는 인자의 타입이고, 반환 타입은 함수의 반환 값의 타입입니다.
// (Int, Int) -> Int 타입의 함수 선언
val sum: (Int, Int) -> Int = { a, b -> a + b }
// (String) -> Unit 타입의 함수 선언
val printMessage: (String) -> Unit = { message -> println(message) }
함수 타입을 매개변수로 사용하기
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
fun main() {
val add: (Int, Int) -> Int = { x, y -> x + y }
val subtract: (Int, Int) -> Int = { x, y -> x - y }
println(operateOnNumbers(5, 3, add)) // 출력: 8
println(operateOnNumbers(10, 4, subtract)) // 출력: 6
}
함수 타입을 반환 값으로 사용하기
fun getCalculator(operator: String): (Int, Int) -> Int {
return when (operator) {
"+" -> { a, b -> a + b }
"-" -> { a, b -> a - b }
"*" -> { a, b -> a * b }
"/" -> { a, b -> a / b }
else -> throw IllegalArgumentException("Unknown operator")
}
}
fun main() {
val addFunction = getCalculator("+")
println(addFunction(3, 5)) // 출력: 8
val multiplyFunction = getCalculator("*")
println(multiplyFunction(4, 6)) // 출력: 24
}
함수 타입과 Nullable 함수 타입
fun handleNullableFunction(fn: ((Int) -> Int)?) {
if (fn != null) {
val result = fn(10)
println(result)
} else {
println("Function is null")
}
}
fun main() {
val addTen: (Int) -> Int = { it + 10 }
handleNullableFunction(addTen) // 출력: 20
val nullFunction: ((Int) -> Int)? = null
handleNullableFunction(nullFunction) // 출력: Function is null
}
함수 타입은 코틀린에서 함수형 프로그래밍을 지원하고, 고차 함수와 함께 사용되어 코드의 간결성과 유연성을 높여줍니다. 함수 타입은 다양한 상황에서 함수를 값으로 다룰 수 있도록 해주므로, 함수형 프로그래밍 개념을 적용할 때 중요한 역할을 합니다.
With ChatGPT