Android - RxJava(3) - Observable.fromCallable(), CompositeDisposable

유의선·2024년 10월 8일

Observable.fromCallable()

Observable.fromCallable() 는 RxJava에서 비동기 작업을 수행할 때 사용하는 메서드 중 하나로, 주어진 Callable 인터페이스를 이용해 특정 작업을 수행하고, 그 결과를 Observable로 만들어준다.

    private Observable<String> performTask() {
        return Observable.fromCallable(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "";
            }
        });
    }

    // 람다식
    private Observable<String> performTask() {
        return Observable.fromCallable(() -> {
           return ""; 
        });
    }

fromCallable 메서드는 Callable 객체를 받아서, 해당 작업을 수행한 후 반환값을 Observable로 생성한다.
Callable은 제네릭 타입을 사용해 반환할 데이터 타입을 지정할 수 있으며, 여기서는 String 타입을 반환하였다.

Callable 인터페이스에서 call() 메서드는 비동기로 실행할 작업을 정의하는 메서드이다.


CompositeDisposable

CompositeDisposable 는 여러 개의 Disposable 객체를 모아 관리할 수 있는 컨테이너 역할을 하여, 특정 시점에 그룹에 포함된 모든 구독을 한 번에 해제할 수 있게 해준다.

public class MainActivity extends AppCompatActivity {

    private CompositeDisposable disposables = new CompositeDisposable();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       	
        ...

        disposables.add(
                performTask()
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<String>() {
                            @Override
                            public void accept(String s) throws Throwable {
                                // 결과 처리
                            }
                        })
        );

        disposables.add(
                Observable.just("Task")
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(result -> {
                            // 결과 처리
                        })
        );
    }

	...

    @Override
    protected void onDestroy() {
        super.onDestroy();

        disposables.clear();
    }
}

disposables.add() 를 통해 CompositeDisposable 에 구독을 추가한다.
disposables.clear() 를 통해 CompositeDisposable 에 추가된 모든 구독을 해제한다.

이를 통해 메모리 누수를 방지할 수 있다.

0개의 댓글