개발자이야기
kotlin 고차함수 본문
High-order functions
고차함수는 함수를 매개변수로 사용하거나 함수를 반환하는 함수이다.
위의 내용을 한번 알아봅시다.
fun main(args: Array<String>) {
highFunctions {
print(it) <-- 2. 코드블럭 실행
}
}
private fun highFunctions(function: (Int) -> Unit) {
function(20) <-- 1. 고차함수 호출
}
highFunctions() 함수의 매개변수에는 함수를 매개변수로 받고 있습니다. 매개변수로 존재하는 function 은 반환값이 없는 함수입니다. 여기서 -> Unit 은 java의 void와 같습니다. (고차함수의 반환 유형은 생략할 수 없습니다.)
위와 같이 매개변수의 함수(function(20))를 호출 함으로써 코드블럭이 실행됩니다.
fun main(args: Array<String>) {
val value = highFunctions(30) { 코드블록
"값은 $it*3" <-- 반환값
}
println(value)
}
private fun <R> highFunctions(input: Int, function: (Int) -> R): R {
return function(input)
}
위와 같이 고차함수를 호출하여 코드블록 결과값을 반환하여 return 시켜주는 함수를 만들수도 있습니다.
위의 예제에서의 return 값은 코드블록의 반환 타입(R)을 return 하고 있습니다. 코드블록 내에서는 코드블럭의 마지막 줄이 반환값으로 간주됩니다.
interface Callback {
fun callback(value: String)
}
fun main(args: Array<String>) {
function(object : Callback {
override fun callback(value: String) {
println(value)
}
})
}
fun function(callback: Callback) {
callback.callback("콜백!!")
}
위의 코드는 저희에게 익숙한 인터페이스로 구현된 콜백 입니다. 간단한 행동을 하는경우 interface를 만들어주고 여간 귀찮은게 아닙니다.
fun main(args: Array<String>) {
function {
println(it)
}
}
fun function(callback: (String) -> Unit) {
callback("콜백!!")
}
위의 코드는 interface를 사용하여 구현한 콜백과 동일한 역할을 수행합니다 이와 같이 구성요소 간에 통신을 하는데에 유용하게 사용할수도 있습니다.
읽어주셔서 감사드리며 피드백은 언제든 환영합니다.
간단하게 고차함수를 코드위주로 알아봤습니다. 후에 추가적으로 더 깊게 파악하여 설명을 작성해볼까 합니다.
'kotlin' 카테고리의 다른 글
kotlin coroutine (0) | 2021.08.24 |
---|---|
kotlin data model 쉽게 만들기 (0) | 2021.08.02 |
kotlin map, flatMap (0) | 2021.06.25 |
kotlin scope functions (let,run,with,apply,also) (0) | 2021.06.01 |