Post

Rx 문제 풀기 기록

Rx 문제 풀기 기록

📌 1번 문제 (✅ 정답)

  • 문제 요구사항
    1. Observable.of를 사용하여 "Hello", "RxSwift", "World"를 방출하세요.
    2. subscribe를 이용하여 방출된 값을 print하세요.
  • 제출한 답
1
2
3
4
Observable.of("Hello", "RxSwift", "World")
    .subscribe { event in
        print(event)
    }
  • 정답 여부:정답
  • 실행 결과

    1
    2
    3
    4
    
      next(Hello)
      next(RxSwift)
      next(World)
      completed
    

📌 2번 문제 (✅ 정답)

  • 문제 요구사항
    1. "Swift", "RxSwift", "Dispose"를 방출하는 Observable을 만드세요.
    2. subscribe를 사용하여 값을 출력하세요.
    3. dispose()를 사용하여 구독을 해제하세요.
  • 제출한 답
1
2
3
4
5
6
7
let subscription = Observable.of("Swift", "RxSwift", "Dispose")
    .subscribe { event in
        print(event)
    }

subscription.dispose()

  • 정답 여부:정답

📌 3번 문제 (❌ 오답 → 수정 필요)

  • 문제 요구사항
    1. "A", "B", "C"를 방출하는 Observable을 만드세요.
    2. subscribe를 사용하여 값을 출력하세요.
    3. DisposeBag을 사용하여 구독을 관리하세요.
  • 틀린 답
1
2
3
4
5
6
7
let ob = Observable.of("One","Two","Three")

ob.subscribe { e in
print(e)
}
.dispose()

  • 틀린 이유:
    1. .dispose()subscribe()의 반환 값에서 호출해야 함.
    2. ob.dispose()는 불가능 (Observable 자체에 dispose()가 없음).
  • 정답 코드
1
2
3
4
5
6
7
8
let disposeBag = DisposeBag()

Observable.of("A", "B", "C")
    .subscribe { event in
        print(event)
    }
    .disposed(by: disposeBag)


📌 4번 문제 (✅ 정답)

  • 문제 요구사항
    1. PublishSubject<String>을 생성하세요.
    2. subscribe를 사용하여 값을 출력하세요.
    3. onNext()를 사용하여 "First", "Second", "Third"를 방출하세요.
    4. DisposeBag을 사용하여 구독을 관리하세요.
  • 제출한 답
1
2
3
4
5
6
7
8
9
10
11
let subject = PublishSubject<String>()
let disposeBag = DisposeBag()

subject.subscribe { event in
     print(event)
}.disposed(by: disposeBag)

subject.onNext("First")
subject.onNext("Second")
subject.onNext("Third")

  • 정답 여부:정답

📌 5번 문제 (❌ 오답 → 수정 필요)

  • 문제 요구사항
    1. ReplaySubject<String>버퍼 크기 2 로 생성하세요.
    2. "One", "Two", "Three"를 방출하세요.
    3. 새로운 구독자를 추가한 후, 처음 받는 값이 무엇인지 확인하세요.
  • 틀린 답
1
2
3
4
5
6
7
8
9
10
11
12
let replaySubject: ReplaySubject<String> = ReplaySubject<String>()
let d = DisposeBag()

replaySubject.buffer(2)

replaySubject.onNext("One")
replaySubject.onNext("Two")
replaySubject.onNext("Three")

replaySubject
.subscribe(onNext: { print($0) })
.disposed(by: d)
  • 틀린 이유:
    1. ReplaySubject<String>() 생성할 때 버퍼 크기를 지정하지 않음
    2. replaySubject.buffer(2)라는 메서드는 존재하지 않음
    3. ReplaySubject의 버퍼 크기는 생성자에서 설정해야 함
  • 정답 코드
1
2
3
4
5
6
7
8
let subject: ReplaySubject<String> = ReplaySubject<String>(bufferSize: 2)

subject.onNext("One")
subject.onNext("Two")
subject.onNext("Three")

subject.subscribe(onNext: { print($0) })

  • 실행 결과

    1
    2
    
      Two
      Three
    

📌 6번 문제 (✅ 정답)

  • 문제 요구사항
    1. PublishSubject<String>을 생성하세요.
    2. DisposeBag을 사용하여 구독을 자동으로 해제하세요.
    3. "Hello", "RxSwift"를 방출한 후, DisposeBag을 새로 할당하여 구독을 해제하세요.
    4. "World"를 방출했을 때, 기존 구독자가 값을 받지 못해야 합니다.
  • 제출한 답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let subject: PublishSubject<String> = PublishSubject<String>()
var disposeBag = DisposeBag()

subject
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

subject.onNext("Hello")
subject.onNext("RxSwift")

disposeBag = DisposeBag() // 기존 구독 해제됨

subject.onNext("World") // 출력되지 않아야 함

  • 정답 여부:정답

📌 7번 문제 (❌ 오답 → 수정 필요)

  • 문제 요구사항
    1. ReplaySubject<String>버퍼 크기 2 로 생성하세요.
    2. "One", "Two", "Three"를 방출하세요.
    3. 새로운 구독자를 추가한 후, 처음 받는 값이 무엇인지 확인하세요.
  • 틀린 답
1
2
3
4
5
6
7
8
9
let subject: ReplaySubject<String> = ReplaySubject<String>(bufferSize: 2)

subject.onNext("One")
subject.onNext("Two")
subject.onNext("Three")
subject.subscribe(onNext: { print($0)})

처음 받는 값은 Two . 버퍼 사이즈가 2라서

  • 틀린 이유:
    1. 코드는 맞았지만, 출력 결과를 정확히 이해해야 함
    2. "One"은 버퍼에서 사라지고, "Two""Three"가 남음
  • 정답 코드 (변경 없음)
1
2
3
4
5
6
7
8
let subject: ReplaySubject<String> = ReplaySubject<String>(bufferSize: 2)

subject.onNext("One")
subject.onNext("Two")
subject.onNext("Three")

subject.subscribe(onNext: { print($0) })

  • 실행 결과

    1
    2
    3
    
      Two
      Three
        
    
This post is licensed under CC BY 4.0 by the author.