1. Disposable / dispose()

사전적 의미로 “처리하다/없애다”라는 뜻을 가지고 있습니다~

<aside> ❓ 이전까지 우리는 Observable을 통해서 데이터의 흐름을 관찰가능한 상태로 만들고 subscribe를 통해 해당 데이터를 구독하여 이벤트를 받는 과정을 배웠습니다.

이번에는 그럼 더이상 Observable에 대한 이벤트를 받기 싫을 때 “구독 해제”하는 법을 배워봅시다!

</aside>

1-1. Disposable

Rx에서 구독을 해제할 때 사용할 수 있는 친구! 음… 일단 구독하는 메소드인 subscribe의 원형을 다시 한번 봅시다.

public func subscribe(_ on: @escaping (Event<Element>) -> Void) -> Disposable

반환 타입이 Disposable입니다!

즉, subscribe 메소드를 호출할 때 Observalbe을 구독할 수 있지만

해당 Observable이 더이상 필요하지 않을 때 → 해당 구속을 취소할 수 있는 Disposable 타입의 값을 리턴한다!

1-2. Dispose

Disposable을 살펴보면 아래 코드와 같이 dispose라는 메소드를 가진 Protocol로 정의되어 있습니다!

public protocol Disposable {
    /// Dispose resource.
    func dispose()
}

그럼 위 내용을 전부 정리해봤을때 구독을 해제하는 과정은

<aside> ❗ 1. Observer가 어떤 Observable의 이벤트를 받고 싶을 땐 subscribe 메소드로 구독함 2. subscribe 메소드는 구독을 해제할 때 Disposable 타입의 인스턴스 반환 3. 이 Disposable 타입에 대고 dispose() 메소드를 호출 4. Observable에 대한 구독 해제

</aside>

1-3. 메모리 관리

물론 dispose를 사용하는 이유를 내가 원하는 시점에 해당 이벤트의 구독을 끊기 위함도 있지만 가장 궁극적인 목표는 **“메모리 누수를 방지”**하기 위함이다.

아래 예시를 확인해보자

코드는 1초에 한번씩 0부터 순차적인 숫자를 방출하는 Observable을 만들고,

해당 Observable을 구독하여 이벤트가 방출할때 그 숫자를 출력한다.