Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- mysql
- SwiftUI Tutorial
- node
- MediaSession
- PagingLib
- RxKotlin
- databinding
- SWIFTUI
- liveData
- Animation
- paging
- Kotlin
- node.js
- junit
- Android
- Android 13
- Koin
- 동영상
- list
- 테스트 자동화
- GCP
- Reactive
- google play
- rx
- Observable
- android13
- 인앱결제
- MediaPlayer
- mvvm
- MotionLayout
Archives
- Today
- Total
봄날은 갔다. 이제 그 정신으로 공부하자
Callback Java에서 Kotlin으로… 본문
이번 글에서는 기존에 Java에서 사용하던 방식에 비해 많은 부분이 상이한 kotlin의 Callback 사용 방식에 대해 설명합니다.
Java
Java에서 callback을 사용하기 위해서는 interface를 선언해주고 콜백을 받는 곳에서 interface를 정의해주고
콜백을 호출하는 곳에서 콜백 인스턴스를 호출해주면 됩니다.
선언 및 정의 그리고 사용은 아래와 같습니다.
// interface 선언
public interface MyCallback{
public void onClick()
}
// 콜백을 받는 곳에서 interface 정의
MyCallback callback = new MyCallback(){
@Override
public void onClick(){
// Click~~~
}
}
// callback을 전달받는 함수 정의 및 콜백 호출
public void setCallback(MyCallback callback){
callback.onClick()
}
Java에서 콜백을 한번 사용하려면 위와 같이 많은 수고가 들어 갑니다.
한번 만들어놓고 계속 재사용할 수 있는 콜백이라면 이런 수고가 아깝지 않겠지만 콜백은 한두번 정도만 사용하는 경우가 많고
위와 같이 interface와 정의 부분이 분리되어 있으면 아무래도 가독성도 떨어지게 됩니다.
Kotlin
코틀린에서는 람다식을 사용해 간단히 콜백 사용이 가능합니다.
funcA에서 콜백을 넘겨주고 funcB에서 콜백을 호출한다면 아래와 같이 코딩해주면 됩니다.
fun funcA(){
funcB(){
// call~~~
}
}
fun funcB(callback: (()-> Unit)){
callback.invoke()
}
funcA()함수에서 funcB()함수를 호출할 때 “()”는 생략 가능합니다.
funcB(){ } -> funcB{ }
콜백으로 값을 넘겨 받아야 할 필요가 있는 경우에는 아래와 같이 선언해주면 됩니다.
fun funcA(){
funcB{ it ->
// call~~~
}
}
fun funcB(callback: ((Int)-> Unit)){
callback.invoke(10)
}
'android Tip' 카테고리의 다른 글
PopupWindow로 Spinner 대체하기 (0) | 2021.01.18 |
---|---|
Dialog 커스텀하기 (0) | 2021.01.15 |
여러가지 방식으로 List 만들어보기 - OldStyle (0) | 2021.01.11 |
Coroutine - part2 (0) | 2020.12.28 |
Coroutine - part1 (0) | 2020.12.25 |
Comments