Rx 문제 풀기 기록
Rx 문제 풀기 기록
📌 1번 문제 (✅ 정답)
- 문제 요구사항
Observable.of
를 사용하여"Hello", "RxSwift", "World"
를 방출하세요.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번 문제 (✅ 정답)
- 문제 요구사항
"Swift", "RxSwift", "Dispose"
를 방출하는Observable
을 만드세요.subscribe
를 사용하여 값을 출력하세요.dispose()
를 사용하여 구독을 해제하세요.
- 제출한 답
1
2
3
4
5
6
7
let subscription = Observable.of("Swift", "RxSwift", "Dispose")
.subscribe { event in
print(event)
}
subscription.dispose()
- 정답 여부: ✅ 정답
📌 3번 문제 (❌ 오답 → 수정 필요)
- 문제 요구사항
"A", "B", "C"
를 방출하는Observable
을 만드세요.subscribe
를 사용하여 값을 출력하세요.DisposeBag
을 사용하여 구독을 관리하세요.
- 틀린 답
1
2
3
4
5
6
7
let ob = Observable.of("One","Two","Three")
ob.subscribe { e in
print(e)
}
.dispose()
- 틀린 이유:
.dispose()
는subscribe()
의 반환 값에서 호출해야 함.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번 문제 (✅ 정답)
- 문제 요구사항
PublishSubject<String>
을 생성하세요.subscribe
를 사용하여 값을 출력하세요.onNext()
를 사용하여"First"
,"Second"
,"Third"
를 방출하세요.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번 문제 (❌ 오답 → 수정 필요)
- 문제 요구사항
ReplaySubject<String>
을 버퍼 크기2
로 생성하세요."One"
,"Two"
,"Three"
를 방출하세요.- 새로운 구독자를 추가한 후, 처음 받는 값이 무엇인지 확인하세요.
- 틀린 답
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)
- 틀린 이유:
ReplaySubject<String>()
생성할 때 버퍼 크기를 지정하지 않음replaySubject.buffer(2)
라는 메서드는 존재하지 않음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번 문제 (✅ 정답)
- 문제 요구사항
PublishSubject<String>
을 생성하세요.DisposeBag
을 사용하여 구독을 자동으로 해제하세요."Hello"
,"RxSwift"
를 방출한 후,DisposeBag
을 새로 할당하여 구독을 해제하세요."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번 문제 (❌ 오답 → 수정 필요)
- 문제 요구사항
ReplaySubject<String>
을 버퍼 크기2
로 생성하세요."One"
,"Two"
,"Three"
를 방출하세요.- 새로운 구독자를 추가한 후, 처음 받는 값이 무엇인지 확인하세요.
- 틀린 답
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라서
- 틀린 이유:
- 코드는 맞았지만, 출력 결과를 정확히 이해해야 함
"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.