조건 연산자란?
특정 조건에 맞는지 알려주는 boolean 값을 리턴해 특정 조건에 해당할 때 정해진 값을 발행하는 연산자다.
조건 연산자와 필터링 연산자와의 차이점
- 필터링 연산자 - 소스 옵저버블에서 발행하는 값을 확인하는 연산자
- 조건 연산자 - 이미 발행한 값이 아닌 소스 옵저버블의 특성에 따라서 조건 자체를 분기해야 할 때 사용하는 연산자
1. defaultIfEmpty 연산자
defaultIfEmpty 연산자는 소스 옵저버블이 empty 함수로 생성한 옵저버블일 때 인자로 설정한 기본값을 발행하는 연산자다.

empty 함수 (생성함수) - 소스 옵저버블이 아무 값도 발행하지 않고 완료하는 empty 옵저버블을 생성한다.
defaultIfEmpty 연산자 - empty 옵저버블을 생성할 때 기본값을 설정할 필요가 있을 때 사용
연산자 원형
defaultIfEmpty<T, R>(defaultValue: R = null): OperatorFunction<T, T | R>
/* defaultIfEmpty 연산자의 구현 코드 일부 */
_next(value) {
this.isEmpty = false;
this.destination.next(value);
}
_complete() {
if (this.isEmpty) {
this.destination.next(this.defaultValue);
}
this.destination.complete();
}
[코드 9-1] defaultIfEmpty 연산자의 구현 코드 일부
소스 옵저버블이 empty 옵저버블일 때는 기본값을 출력하고, empty 옵저버블이 아니라면 소스 옵저버블의 원래 동작을 처리한다.
/* defaultIfEmpty 연산자를 이용하는 empty 옵저버블 사용 예 */
const { range } = require('rxjs');
const { defaultIfEmpty } = require('rxjs/operators');
const getRangeObservable = count => range(1, count);
function subscribeWithDefaultIfEmpty(count) {
getRangeObservable(count)
.pipe(defaultIfEmpty('EMPTY'))
.subscribe(value => console.log(`개수(count): ${count}, 값(value): ${value}`));
}
subscribeWithDefaultIfEmpty(0);
subscribeWithDefaultIfEmpty(3);
[코드 9-2] defaultIfEmpty 연산자를 이용하는 Empty 옵저버블 사용 예
실행 결과
개수(count): 0, 값(value): EMPTY
개수(count): 3, 값(value): 1
개수(count): 3, 값(value): 2
개수(count): 3, 값(value): 3
소스 옵저버블이 empty 옵저버블이면 complete 함수를 호출했을 때 기본값을 발행하고, 그렇지 않으면 소스 옵저버블의 원래 동작을 실행한다.
2. isEmpty 연산자
isEmpty 연산자는 true/false 를 값으로 발행해 소스 옵저버블이 empty 옵저버블인지 아닌지를 알려주고 구독 완료하는 연산자다.
isEmpty 연산자와 defaultIfEmpty 연산자의 차이점
- defaultIfEmpty 연산자 - 소스 옵저버블이 empty 옵저버블이 아닐 때 소스 옵저버블의 원래 동작을 실행
- isEmpty 연산자 - 소스 옵저버블이 empty 옵저버블인지 확인 후 true/false 값을 발행하고 구독을 완료

연산자 원형
isEmpty<T>(): OperatorFunction<T, boolean>
/* isEmpty 연산자의 사용 예 */
const { range } = require('rxjs');
const { isEmpty } = require('rxjs/operators');
const getRangeObservable = count => range(1, count);
function subscribeWithIsEmpty(count) {
getRangeObservable(count)
.pipe(isEmpty())
.subscribe(value => console.log(`개수(count): ${count}, 값(value): ${value}`));
}
subscribeWithIsEmpty(0);
subscribeWithIsEmpty(3);
[코드 9-3] isEmpty 연산자의 사용 예
실행 결과
개수(count): 0, 값(value): true
개수(count): 3, 값(value): false
소스 옵저버블은 어떠한 값도 발행하지 않는다.
3. find 연산자
find 연산자는 인자로 사용하는 predicate 함수로 소스 옵저버블에서 발행하는 값 중 처음으로 함수 조건을 만족했을 때 true 를 리턴하는 값을 발행하고 구독을 완료하는 연산자다. 구독을 완료 할 때까지 조건을 만족하는 값이 없었다면 undefined 라는 값을 발행한다.

연산자 원형
find<T>(
predicate: (value: T, index: number, source: Observable<T>) => boolean,
thisArgs?: any
): MonoTypeOperatorFunction<T>
predicate 함수를 호출해 동작하는 중 에러가 발행하면 error 함수를 호출해 에러를 전달 받는다. 소스 옵저버블에서 에러가 발생해도 error 함수로 에러를 전파한다.
/* find 연산자의 사용 예 */
const { range } = require('rxjs');
const { find } = require('rxjs/operators');
const getRangeObservable = count => range(1, count);
function subscribeWithFindGreaterThan3(count) {
getRangeObservable(count)
.pipe(find(x => x > 3))
.subscribe(value => console.log(`개수(count): ${count}, 값(value): ${value}`));
}
subscribeWithFindGreaterThan3(5);
subscribeWithFindGreaterThan3(1);
[코드 9-4] find 연산자의 사용 예
실행 결과
개수(count): 5, 값(value): 4
개수(count): 1, 값(value): undefined'RxJS' 카테고리의 다른 글
| 11장. 서브젝트 요약 (0) | 2024.08.06 |
|---|---|
| 10장. 에러 처리 요약 (0) | 2024.08.05 |
| 8장. 유틸리티 연산자 요약 (0) | 2024.08.02 |
| 7장. 수학 및 결합 연산자 요약 (0) | 2024.08.02 |
| 6장. 조합 연산자 요약 (0) | 2024.08.01 |