룬아님의 취중코딩

(Kotlin) 함수를 인자로 넘겨서 실행 본문

개발/Kotlin

(Kotlin) 함수를 인자로 넘겨서 실행

룬아님 2019. 10. 16. 10:22

기능을 개발할 때에 조건은 같지만 상황에 따라 다른 함수를 실행해야 할 경우가 있다.
이를 구현할 방법은 특정 인자를 넘겨서 if혹은 when으로 분기를 하는 방법도 있겠지만
이번에는 함수 자체를 인자로 넘겨 분기 처리를 통해 원하는 기능을 작동하도록 구현해 보았다.

 

고차함수 이용

2019/10/15 - [개발/Kotlin] - Kotlin Bootcamp for Programmers 9. 람다와 고차함수

fun updateDirty(dirty: Int, operation: (Int) -> Int): Int {
   return operation(dirty)
}
val waterFilter: (Int) -> Int = { dirty -> dirty / 2 }
println(updateDirty(30, waterFilter))

이렇게 람다를 이용하여 고차함수를 사용할 수 있다.

이것을 응용하여

private fun confirmBackUpData(operation: () -> Unit) {
    AlertDialog.Builder(this)
            .setMessage(R.string.message_backup_notice)
            .setPositiveButton(R.string.action_ok) { _, _ ->
                operation()
            }.setNegativeButton(R.string.action_cancel) { _, _ -> }
            .show()
}

 

함수를 인자로 받고 원하는 로직에 인자로 받은 함수를 호출한다.

private fun setDataSettingLayout() {
    layout_data_backup.setOnClickListener {
        confirmBackUpData(::saveJsonFileToExternalStorage)
    }
    layout_data_share.setOnClickListener {
        confirmBackUpData(::shareSaveData)
    }
}

리턴값이 없는 Unit 자체를 넘겨주기 위해서는 함수명 앞에 :: 을 붙여주면 된다.

반응형
Comments