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 생명 주기에 따라 관리 | 특정 구독 그룹만 관리가 필요할 때 |
'💡 Today I Learned > 스터디 자료정리' 카테고리의 다른 글
[스터디11일차][RxSwift] 테이블뷰 (0) | 2025.01.31 |
---|---|
[스터디11일차][RxSwift] 검색 어플 만들 때 유용한 연산자 (0) | 2025.01.20 |
[스터디9일차] CollectionView (0) | 2024.11.26 |
[스터디8일차] Diffable Data Source (0) | 2024.11.13 |
[스터디7일차] 객체지향 & 프로토콜 (0) | 2024.11.12 |