강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

wer2wer のプロフィール画像
wer2wer

投稿した質問数

Kevinの分かりやすいRxJava 1部

Single, Maybe, Completable

CompletableObserver 클래스의 람다식 표현관련

作成

·

290

0

안녕하세요

람다식은 인터페이스안에 구현해야할 메소드가 하나만 있을때 사용 가능한것으로 알고있는데

completable.subscribeOn(Schedulers.computation())
        .subscribe(new CompletableObserver() {
    @Override
    public void onSubscribe(Disposable disposable) {
        // 아무것도 하지 않음
    }

    @Override
    public void onComplete() {
        Logger.log(LogType.ON_COMPLETE);
    }

    @Override
    public void onError(Throwable error) {
        Logger.log(LogType.ON_ERROR, error);
    }
});

여기서 CompletableObserver 는 오버라이드 해야할 메소드가 3개나 있는데 어떤 원리로

completable.subscribeOn(Schedulers.computation())
        .subscribe(
                () -> Logger.log(LogType.ON_COMPLETE),
                error -> Logger.log(LogType.ON_ERROR, error)
        );

이런식으로 람다표현이 가능한건가요?

함수형-프로그래밍RxJavaReactive-Streams

回答 1

0

Kevin님의 프로필 이미지
Kevin
インストラクター

안녕하세요?

 

아래 캡쳐 이미지에 있는 코드는 Completable 추상 클래스의 내부 코드 중 일부인데요.

파라미터로 CompletableObserver를 전달 받습니다.

image

아래 캡쳐 이미지 역시 Completable 추상 클래스의 내부 코드 중 일부이고,

파라미터로 두 개의 람다 표현식을 전달 받습니다.

image

즉, 파라미터가 다른 subscribe() 메서드가 Complatable 클래스 내부에 구현되어 있습니다.

첫번째 캡처 이미지에서는 파라미터로 전달 받은 CompletableObserver를 subscribeActual(observer)을 호출할 때 전달합니다. 두번째 캡쳐 이미지에서는 CallbackCompletableObserver의 생성자 파라미터로 람다를 전달한 후에 subscribe(observer)로 호출하는데 이렇게 호출하면 결국 내부에서 subscribeActual(observer)을 다시 호출합니다.

즉, CompletableObserver 인터페이스를 구현하는 클래스 내부에서 람다 표현식을 전달 받아서 사용할 수도 있고, 그렇지 않을 수도 있다라고 생각해 주시면 될 것 같습니다.

wer2wer のプロフィール画像
wer2wer

投稿した質問数

質問する