인프런 커뮤니티 질문&답변

미믹님의 프로필 이미지
미믹

작성한 질문수

Kevin의 알기 쉬운 RxJava 1부

Single, Maybe, Completable

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

작성

·

200

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)
        );

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

답변 1

0

Kevin님의 프로필 이미지
Kevin
지식공유자

안녕하세요?

 

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

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

image

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

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

image

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

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

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

미믹님의 프로필 이미지
미믹

작성한 질문수

질문하기