티스토리 뷰

learning

비동기 데이터 변형 (5/12)

눈침침 2021. 3. 9. 01:02

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다.


Transform

  • Reactor 에는 데이터 변형시킬 수 있는 많은 연산자(Operators) 가 준비되어 있음

연습

// TODO Capitalize the user username, firstname and lastname
Mono<User> capitalizeOne(Mono<User> mono) {
    return mono.map(u -> new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
// TODO Capitalize the users username, firstName and lastName
Flux<User> capitalizeMany(Flux<User> flux) {
    return flux.map(u -> new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
// TODO Capitalize the users username, firstName and lastName using #asyncCapitalizeUser
Flux<User> asyncCapitalizeMany(Flux<User> flux) {
    return flux.flatMap(this::asyncCapitalizeUser);
}

Mono<User> asyncCapitalizeUser(User u) {
    return Mono.just(new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase()));
}
  • Flux 또는 Mono를 이용하고, flatMap 연산을 이용하면 비동기 처리가 가능하다
  • TU로 변환 하려고 할때,
    • flatMap 은 함수를 통해 TPublisher<U>로 처리하여 비동기가 가능하게 됨( map 의 경우, T를 인자로 받아 U를 리턴하는 함수를 이용함)

  • flatMap 은 내부적으로 Publisher<U> 을 모두 구독하고, 하나의 단일 결과로 머지 합니다.
    • Publisher<U> 의 응답값에 따라서 결과 Flux 의 순서가 변경될 수 있습니다.

관련글

2021.03.02 - [learning] - Reactive Programming 소개 (1/12)

2021.03.09 - [learning] - StepVerifier 사용 방법 (4/12)

 

보다 자세한 FlatMap 동작 방식은 jngcii 님의 'flatMap 알아보기' 글을 살펴보아요

jngcii.tistory.com/9

 

flatMap 알아보기

Flux.range(1, 10).flatMap( A ).map(i -> i * 10).subscribe(System.out::println); flatMap이 어떻게 동작하는지 알아보기 위해, 다음 코드의 동작을 잘 살펴보려 한다. A에 함수에 따라 달라지는 동작을 그림과..

jngcii.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함