Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자이야기

kotlin 고차함수 본문

kotlin

kotlin 고차함수

개발자가되고싶어 2021. 6. 6. 18:10
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