- Subjects: Observable 과 Observer 두 역할을 수행한다.
 
종류는 총 4가지
- PublishSubject
 - BehaviorSubject
 - ReplaySubject
 - Variable
 
- PublishSubject
    
- 구독이후에 Observable의 이벤트를 받는다. 예제에서 보면 .subscribe(구독)전에 test1을 값을 추가했지만 출력되지 않고 구독이후에 on한 값들만 출력이 된다.
 
 
let subject = PublishSubject<String>()
subject.onNext("test1") //출력되지 않음
_ = subject
  .subscribe(onNext: { (string) in
    print(string)
})
subject.onNext("test2") // test2 출력
subject.onNext("test3") // test3 출력
- BehaviorSubject
    
- 구독직전의 값 한개를 받는다. 그 뒤에는 PublishSubject과 동일하다.
 
 
let subject = BehaviorSubject<String>(value: "")
subject.onNext("test1") // test1 출력, 아니면 value에다가 직접 값을 넣어줘도 된다.
_ = subject
  .subscribe(onNext: { (string) in
    print(string)
})
subject.onNext("test2") // test2 출력
subject.onNext("test3") // test3 출력
- ReplaySubject
    
- bufferSize크기만큼 구독 전에 발생한 이벤트를 버퍼에 넣고 이벤트를 받는다.
 
 
let subject = ReplaySubject<String>.create(bufferSize: 2) //bufferSize크기를 정해줘야함
subject.onNext("test0") // test0 출력
subject.onNext("test1") // test1 출력
_ = subject
    .subscribe(onNext: { (string) in
        print(string)
    })
subject.onNext("test2") // test2 출력
subject.onNext("test3") // test3 출력
- Variable
    
- 곧 중단될 예정임 패스
 
 
