Skip to content

자바 호환성

코일의 API는 코틀린 우선(Kotlin-first)으로 설계되었습니다. 코일은 인라인 람다(inlined lambdas), 리시버 파라미터(receiver params), 기본 인자(default arguments), 확장 함수(extension functions)와 같이 자바에서 사용할 수 없는 코틀린 언어 기능을 활용합니다.

중요한 점은 suspend 함수는 자바에서 구현될 수 없다는 것입니다. 이는 사용자 지정 Transformation, Size Resolver, Fetcher, Decoder는 코틀린으로 구현되어야 합니다.

이러한 제약에도 불구하고, 코일 API의 대부분은 자바와 호환됩니다. 다음을 사용하여 싱글톤 ImageLoader를 얻을 수 있습니다:

java
ImageLoader imageLoader = SingletonImageLoader.get(context);

ImageRequest를 큐에 넣는(enqueue) 구문은 자바와 코틀린에서 거의 동일합니다:

java
ImageRequest request = new ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .crossfade(true)
    .target(new ImageViewTarget(imageView))
    .build();
imageLoader.enqueue(request);

::: Note ImageView.load는 자바에서 사용할 수 없습니다. 대신 ImageRequest.Builder API를 사용하세요.

::: suspend 함수는 자바에서 쉽게 호출할 수 없습니다. 따라서 이미지를 동기적으로 얻으려면 다음과 같이 자바에서 호출할 수 있는 ImageLoader.executeBlocking 확장 함수를 사용해야 합니다:

java
ImageRequest request = new ImageRequest.Builder(context)
    .data("https://example.com/image.jpg")
    .size(1080, 1920)
    .build();
Drawable drawable = ImageLoaders.executeBlocking(imageLoader, request).getImage().asDrawable(context.resources);

::: Note ImageLoaders.executeBlockingsuspend하는 대신 현재 스레드를 차단합니다. 메인 스레드에서 이것을 호출하지 마십시오. :::