개발/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 자체를 넘겨주기 위해서는 함수명 앞에 :: 을 붙여주면 된다.
반응형