본문 바로가기

나의 플랫폼/안드로이드

[Kotlin] 콜백함수 구현

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Java에선 콜백 함수를 아래와 같이 많이 쓰입니다.


// 콜백 함수 선언

private interface OnStringCallback {
void onCallback(String string);
}

private void testCallback(OnStringCallback callback) {
callback.onCallback("hello callback");
}


// 콜백 함수 실행

testCallback(new OnStringCallback() {
@Override
public void onCallback(String string) {
Log.d("Test","Called : "+string);
}
});


위와 같이 콜백을 위한 interface를 선언 하고 해당 Interface의 함수를 통해서 데이터를 받죠.


만약 위와 같은 소스를 Kotlin에서는 어떻게 할까요??


// 콜백 함수 선언

private fun testCallback(callback: ((String)->Unit)) {
callback.invoke("hello callback")
}


// 콜백 함수 실행

testCallback {
Log.d("Test","Called : "+it)
}


콜백 함수 선언 부분에 보시면 매개 변수가 아래와 같습니다.


이것은 String 값을 콜백 받을 껀데, return 값을 기본 Unit로 설정 하겠다 입니다.


만약 기본으로 Unit를 설정 안할 경우, return 값이 정의가 되지 않기 때문에 데이터를 콜백 받을 수가 없는 것이죠.


fun setClickListener(callback: ((String) -> Unit)?){
binding.root.setOnClickListener {
callback?.invoke("클릭 했다!")

}
}

위 소스는 Databinding된 View를 클릭 했을 때 콜백으로 String 값을 넘겨주는 소스 입니다.


콜백을 자유자재로 사용하시면 좋을 듯 하여 공유해 드립니다.


참고하세요.