티스토리 뷰

1편 : https://junsangkwon.tistory.com/20

2편 : https://junsangkwon.tistory.com/21

 

[iOS] RxSwift 간단한 개념정리 - 2. Operator, Scheduler

전편 : https://junsangkwon.tistory.com/20 [iOS] RxSwift의 간단한 개념 정리 - 1. Observable 이 포스팅은 'RxSwift 4시간 만에 끝내기'라는 유튜브 강의를 보고 하는 개념 정리입니다. ref : https://www.yout..

junsangkwon.tistory.com

 

RxSwift 마지막 편인 3편입니다. 오늘 정리할 내용은 Subject, Relay입니다!

 

Subject

-  Observable이자 Observer

-  실시간으로 Observable에 값을 추가하고 Subscribe를 할 수 있습니다.

-  Subscibe가 호출되는 시점과 상관없이 데이터가 나중에 발생하면 그때부터 이벤트를 전달하는 방식입니다.

 

Subject의 종류

  • PublishSubject
  • BehaviorSubject
  • ReplaySubject
  • AsyncSubject

 

PublishSubject

- 가장 기본 형태로, 초기 값이 따로 없습니다.

- subscribe해도 데이터를 주지 않다가 나중에 데이터가 발생하면 그때 전달하는 방식입니다.

- 진행중에 다른 곳에서 Subscribe 해도 마찬가지로 동작합니다.

override func viewDidLoad(){
	
    super.viewDidLoad()
    
    printnum()
    
    pSubject.onNext(1)
    
    pSubject.onNext(4)

}

let pSubject = PublishSubject<Int>()

func printnum() {

	pSubject.subscibe(onNext: { n in

		print(n)
    
	})
    
}
   
// 출력 결과   
// 1
// 4

 

BehaviorSubject

- PublishSubject와 비슷하지만 디폴트 값(초기 값)이 존재합니다.

- 생성 초기에, subscribe를 하면 디폴트 값이 전달됩니다.

- 그 후, 다른 데이터들도 발생되는 대로 전달합니다.

- 진행 중에 다른 곳에서 Subscribe 한다면 가장 최근에 생성된 값을 전달해줍니다.

override func viewDidLoad(){
	
    super.viewDidLoad()
    
    printnum()
    
    bSubject.onNext(1)
    
    bSubject.onNext(4)

}

let bSubject = BehaviorSubject<Int>(value: 3)

func printnum() {

	bSubject.subscibe(onNext: { n in

		print(n)
    
	})
    
}
   
// 출력 결과   
// 3
// 1
// 4

 

ReplaySubject

- PublishSubject처럼 Subscribe 해도 데이터를 주지 않고, 나중에 데이터가 발생하면 그때 전달합니다.

- 다른 점은, 생성될 때 버퍼 사이즈를 지정하여서 진행 중에 다른 곳에서 Subscribe 하게 되면,

버퍼 사이즈만큼 최근 데이터들을 모두 전달합니다.

override func viewDidLoad(){
	
    super.viewDidLoad()
    
    printnum1()
    
    rSubject.onNext(1)
    
    rSubject.onNext(4)
    
    printnum2()

}

let rSubject = ReplaySubject<Int>.create(bufferSize: 3)

func printnum1() {

	rSubject.subscibe(onNext: { n in

		print(n)
    
	})
    
}

func printnum2() {

	rSubject.subscibe(onNext: { n in

		print(n)
    
	})
    
}
   
// 출력 결과   
// 1
// 4
// 1
// 4

 

AsyncSubject

- Subscribe 해도 데이터를 주지 않고, 데이터가 발생해도 주지 않습니다.

- Complete 돼야만 Subscribe 한 곳으로 가장 마지막에 발생한 데이터를 전달하는 방식입니다.

 

Relay

- Subject와 같은 기능을 합니다.

- 사용하기 위해서는 RxCocoa를 import 해야 합니다.

- 제일 크게 다른 점은, error 이벤트, complete 이벤트가 발생해도 종료되지 않습니다.

- 이러한 특징으로 UI 이벤트를 할 때 주로 사용합니다.

- 이벤트를 발생할 때, onNext()가 아닌 accept()를 사용합니다.

- 종류는 PublishRelay, BehaviorRelay 가 있습니다.

 

PublishRelay

- PublishSubject의 Wrapper 클래스입니다.

- PublishSubject의 특성과 같습니다.

 

BehaviorRelay

- BehaviorSubject의 Wrapper 클래스입니다.

- BehaviorSubject의 특성과 같습니다.

- .value를 사용해 현재 값을 꺼낼 수 있습니다.

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함