Youjin Lee.

[RxSwift] RxSwift와 Observable, Disposable 이해하기

[RxSwift] RxSwift와 Observable, Disposable 이해하기

RxSwift의 기본 개념인 Observable, Observer, Subscribe, Disposable에 대해 알아보자

[RxSwift] RxSwift와 Observable, Disposable 이해하기

RxSwift란

RxSwift를 이해하기 위해서는 먼저 반응형 프로그래밍을 이해하면 좋다. 반응형 프로그래밍은 데이터의 흐름과 변경 사항을 전파하는 데에 중점을 둔 프로그래밍 패러다임으로, 데이터에 어떤 변경이 이루어졌을 때(즉, 이벤트가 발생했을 때) 연결된 실행 모델들이 데이터를 전파받아 특정 작업을 수행한다.

ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 작성하기 위한 라이브러리입니다.

결국은 어떠한 비동기 이벤트를 관찰 가능한 형태로 만든다는 점 정도만 이해하면 된다.

Observable과 Observer, Subscribe

관찰 가능한 형태 자체를 바로 Observable이라고 한다. 이 Observable은 관찰이 가능한 흐름이며 비동기 이벤트의 시퀀스를 생성할 수 있는 대상이다.

이벤트를 관찰 가능한 형태로 만든다는 건 Observable 타입의 인스턴스를 생성하는 것과 같다.

Observer는 비동기 이벤트가 발생했을 때 전파받을 수 있는 객체로서, Observable을 구독한다.

RxSwift의 subscribe() 메소드에는 총 4개의 파라미터가 있다:

  • onNext는 Observable 객체에서 새로운 item이 방출됐을 때 실행된다.
  • onError는 Observable 객체에서 기대하는 데이터가 생성되지 않았거나 오류가 발생했을 때 실행된다.
  • onCompleted는 Observable 객체의 이벤트가 종료되어 더 이상 호출되지 않을 때 실행된다.

Disposable

Disposable는 Observable 객체를 구독 해제하고 싶을 때 사용할 수 있다.

subscribe() 메소드를 호출할 경우 Observable 객체를 구독할 수 있는데, 해당 Observable 객체의 이벤트를 더 이상 구독하지 않아도 될 경우 Disposable 타입의 값을 리턴해 구독을 취소시켜 준다.

disposed, DisposeBag

구독을 해제하는 건 메모리 관리 측면에서 큰 의미가 있다. 만약 구독을 해제해주지 않으면 Observable 객체가 이벤트가 발생할 때마다 계속 item을 방출할 우려가 있고, 이로 인한 메모리 릭(Memory Leak)도 발생할 수 있다!

그래서 Disposable 타입의 인스턴스들을 담을 수 있는 DisposeBag이라는 배열을 사용한다.

결론:

  • Observable 객체를 선언하고 하나하나 메모리 릭 안나게 관리할 자신이 없다면 subscribe() 호출할 때 disposed() 메서드를 사용해서 DisposeBag 안에 담아놓으면 된다.
  • 그러면 DisposeBag이 알아서 메모리 릭 안나게 deinit할 때 구독 해제 해주니까~

© 2025 Youjin Lee. All rights reserved.