Subjects Explained
Explain what a Subject is, how it's both an Observable and an Observer, and why that makes it a multicasting primitive.
A plain Observable is unicast by default — every subscriber gets its own independent execution of the producer logic, unaware of any other subscribers. A Subject breaks this isolation: it's simultaneously an Observable (you can subscribe to it) and an Observer (it has .next(), .error(), .complete() methods you can call manually), which means it acts as a multicasting hub — call .next(value) once, and every current subscriber receives that same value at the same time.
A plain Observable is like a magician performing a private trick individually for each audience member who steps into the booth; a Subject is like a live stage show where everyone currently seated in the audience sees the same trick performed at the same exact moment.