본문 바로가기
💡 Today I Learned/스터디 자료정리

[스터디10일차] Disposable

by 솔비님 2025. 1. 8.

RxSwift를 사용하다 보면 나오는 disposed

disposable은 "사용 후 버리게 되어있는" 이라는 의미를 가지고 있다

 

 

이전에 살펴본 Obsevable의 개념을 살펴보면 옵저버블이 관찰 가능한 상태일 때 옵저버가 옵저버블을 구독하는 형태인데,

더 이상 옵저버블에 관한 이벤트를 받고싶지 않을 때 구독 해제가 필요함

이 때 사용하는 것이 Disposable 이다

Disposable = 리소스를 해제하고 이벤트 구독을 중지한다

 

그럼 어떻게 사용할까?

 

 


Disposable의 사용 방법

1.  Disposable 기본

  • 기본적으로 옵저버블을 사용하면 Disposable 객체가 반환되는데, 해당 객체를 사용하여 구독을 해제한다
let observable = Observable.of(1, 2, 3)

let subscription = observable.subscribe(onNext: { value in
    print(value)
})

// 필요하지 않을 때 해제
subscription.dispose()

 

 

2. DisposeBag

  • 가장 일반적인 방법으로 여러 Disposable 객체를 자동으로 관리할 때 사용한다
  • DisposeBag은 객체가 해제될 때 내부에 있는 모든 Disposable를 해제한다
  • 메모리 누수를 방지하는데 유용하다
let disposeBag = DisposeBag()

let observable = Observable.of(1, 2, 3)

observable
    .subscribe(onNext: { value in
        print(value)
    })
    .disposed(by: disposeBag) // DisposeBag에 추가

 

 

 

3.  CompositeDisposable

  • 여러 Disposable을 그룹화하여 한꺼번에 관리한다
let compositeDisposable = CompositeDisposable()

let disposable1 = Observable.just(1).subscribe(onNext: { print($0) })
let disposable2 = Observable.just(2).subscribe(onNext: { print($0) })

_ = compositeDisposable.insert(disposable1, disposable2)

// 두 옵저버블(disposable1, disposable2)을 compositeDisposable에 insert해주고 한번에 관리
compositeDisposable.dispose()

 

 

📝 요약
dispose(): 특정 구독을 수동으로 해제
DisposeBag: 객체의 수명 주기에 따라 Disposable을 자동으로 관리
CompositeDisposable: 여러 Disposable을 그룹화하여 관리

 

 

특징 DisposeBag CompositeDisposable
관리방식 객체의 생명 주기에 따라 자동 관리 Disposable을 수동으로 추가/제거 관리
특정 Disposable 해제 불가능(전체해제) 가능 (개별적으로 해제 가능)
해제 시점 DisposeBag 해제 시 명시적으로 dispose() 호출 시
사용 예시 ViewController 생명 주기에 따라 관리 특정 구독 그룹만 관리가 필요할 때