SPRING

[SPRING] WEBFLUX 리액티브 오퍼레이션 정리

집한구석 2022. 5. 8. 17:11
728x90

리액티브 오퍼레이션 종류

  • 생성 오퍼레이션
  • 조합 오퍼레이션
  • 변환 오퍼레이션
  • 로직 오퍼레이션

Flux와 Mono가 제공하는 오퍼레이션을 통하여 데이터를 전달하는 파이프 라인을 생성함


생성 오퍼레이션

//하나 이상의 객체 데이터 생성
Flux<Integer> numberFlux = Flux.just(1,2,3,4,5);
numberFlux.subscribe(System.out::println);

//list 데이터 Flux
List<String> fruits = List.of("사과", "딸기", "배");
Flux<String> flux = Flux.fromIterable(fruits);
flux.subscribe(System.out::println);
  • just() : 하나 이상의 객체 데이터 생성
  • fromArray() : 배열 생성
  • fromIterable() :  리스트 생성
  • fromStream() :  Stream 생성
  • range() : int 범위 지정해서 순차적으로 생성

조합 오퍼레이션

//두 개의 Flux요소가 하나의 Flux로 변경
Flux<Integer> start = Flux.range(1,5);
Flux<Integer> end = Flux.range(6, 10);
Flux<Integer> flux = Flux.zip(start, end, Math::addExact);
flux.subscribe(System.out::println);
  • mergeWith() : 두 개이상의 리액티브 타입을 결합
  • zip() : 정적인 생성 오퍼레이션, 기본생성으로는 Tuple2형태로 결합, 원하는 객체로 결합 가능

변환 오퍼레이션

//1은 skip
Flux.range(1,5)
    .skip(1)
    .subscribe(System.out::println);

//1, 2, 3만 출력
Flux.range(1,5)
    .take(3)
    .subscribe(System.out::println);

//5는 제외 1, 2, 3, 4만 출력
Flux.range(1,5)
    .filter(number -> number != 5)
    .subscribe(System.out::println);

//1, 2로 출력
Flux.just(1, 1, 1, 1, 2)
    .distinct()
    .subscribe(System.out::println);

//정수형으로 변환
Flux.just("1", "5")
    .map(Integer::parseInt)
    .subscribe(System.out::println);
  • skip() : 지정된 수를 건너뛴 후 전달하거나 지정된 시간이 경과할 경우 전달
  • take() : 처음 지정된 수의 값만 전달하고 구독 취소
  • filter() : 지정된 조건식 필터링 처리함
  • distinct() : 중복 필터링
  • map() : 새로운 타입으로 변환 발행
  • flatMap() : 오퍼레이션 수행 도중 생성되는 임시 Flux or Mono를 사용하여 변환을 수행, 비동기 변환이 가능함

로직 오퍼레이션

//모두 같지 않아서 false
Flux.just("넥슨", "NC", "넷마블")
    .all(company -> company.equals("넥슨"))
    .subscribe(System.out::println);

//하나만 같아서 true
Flux.just("넥슨", "NC", "넷마블")
    .any(company -> company.equals("넥슨"))
    .subscribe(System.out::println);
  • all() : 모든 것이 조건을 충족하는 지 확인
  • any() : 최소 하나가 조건을 충족하는지 확인

'SPRING' 카테고리의 다른 글

[SPRING] JPA 고아객체  (0) 2022.06.06
[SPRING] JPA 영속성 전이  (0) 2022.06.06
[SPRING] JPA 쿼리메소드 요약  (0) 2022.04.19
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)  (0) 2022.03.02
[SPRING] Transaction Propagation  (0) 2021.09.22