Subject는 옵저버와 옵저버블의 역할을 하는 ReactiveX의 일부 구현에서 사용할 수 있는 일종의 bridge 또는 proxy이다. Subject는 옵저버이기 때문에 하나 이상의 옵저버블을 구독할 수 있다. 또한 옵저버블이기 때문에 관찰한 항목을 다시 방출해 넘겨줄 수 있으며, 새 항목을 방출할 수도 있다.
Subject가 옵저버블을 구독하기 때문에 옵저버블이 항목의 방출을 시작하도록 트리거한다(옵저버블이 “Cold”인 경우. 즉, 옵저버블이 항목의 방출을 시작하기 전에 구독을 기다리는 경우). 이 방법으로 생성된 Subject가 원래 “Cold” 옵저버블을 “Hot” 옵저버블로 변형하는 효과를 가질 수 있다.
특정 사용 사례를 위해 설계된 subject에는 네 가지 종류가 있다. 모든 구현에서 이들 모두를 사용할 수 있는 것은 아니며 일부 구현에서는 다른 명명법을 사용한다. (예: RxScala 에서는 이 문서에서 “PublishSubject”라고 하는 것을 간단히 “Subject”라고 함.)

AsyncSubject는 소스 옵저버블이 방출한 최근 값(오직 최종 값만)을 해당 소스 옵저버블이 완료된 후에 방출한다. (소스 옵저버블이 값을 방출하지 않으면 AsyncSubject도 값을 방출하지 않고 완료된다.)

또한 동일한 최종 값을 후속 옵저버에게 방출한다. 그러나 소스 옵저버블이 오류와 함께 종료되면 AsyncSubject는 항목을 방출하지 않고 단순히 소스 옵저버블의 오류 알림을 전달한다.

옵저버가 BehaviorSubject에 구독하면 소스 옵저버블에서 가장 최근에 방출된 항목(또는 아직 방출되지 않은 경우 시드 / 기본값)을 방출하는 것으로 시작한 다음 소스 옵저버블에서 나중에 방출된 다른 항목을 계속 내보낸다.
