코틀린의 lambda 함수는 자바에서는 인터페이스를 사용하면 됩니다.
(tokenInfo: AccessTokenInfo?, error: Throwable?) -> Unit
위의 함수는 AccessToken 타입과 Throwable 타입의 파라미터를 받아서 Unit 타입을 리턴하고 있습니다. Unit타입은 코틀린에만 존재하고 자바에서는 Void와 동일합니다. void를 사용하셔도 되는데, Void는 오브젝타입이고 null을 리턴해주어야 하지만 void는 리턴이 필요없습니다.
위의 함수 선언을 자바의 인터페이스로 만들면 아래와 같이 됩니다.
public interface AccessTokenCallback {
void onAccessTokenComplete(@Nullable AccessTokenInfo tokenInfo, @Nullable Throwable error);
}
인터페이스의 이름과 메소드의 이름은 아무거나 주셔도 됩니다. 매개변수의 타입과 리턴타입만 잘 맞추어 주시면 됩니다.
그리고 사용하실 때는 인라인 오브젝트를 만드시면 됩니다.
UserApiClient.getInstance().accessTokenInfo(new AccessTokenCallback() {
@Override
public void onAccessTokenComplete(AccessTokenInfo accessTokenInfo, Throwable error) {
//여기에 필요한 코드
}
});
자바8 이상을 사용하신다면 인라인 인터페이스 오브젝트를 lambda expression으로 대체할 수 있습니다.
UserApiClient.getInstance().accessTokenInfo((accessTokenInfo, error) -> {
// 여기에 코드
});
이게 코틀린의 콜백함수와 거의 비슷한 모양입니다. 코틀린은 lamdba expression을 처음부터 지원했기 때문에 자바보다는 사용하기가 더 편합니다.
안드로이드 스튜디오를 시용하신다면 인라인 인터페이스를 오브젝트를 사용하면 람다표현식으로 바꿀 건지 물어보는 힌트가 나오니 그걸로 변환하시면 쉽습니다.