• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.

21.07.03 04:21 작성 조회수 146

0

안녕하세요! 

defer( ), fromFuture( ) 메소드들이 just( ) 연산자처럼 여러 인자 값을 받을 수 있는지 궁금합니다.
아래 코드는 강사님이 제공해주신 예제 ObservableFlatMapExample01을 기반으로 작성해 본 것입니다.

- 원본 (just( ) 연산자)

Observable.just("Hello")
.flatMap(hello -> Observable.just("자바", "파이썬", "안드로이드")
.map(lang -> hello + ", " + lang))
.subscribe(data -> Logger.log(LogType.ON_NEXT, data));


- defer( ) 연산자 사용

Observable.defer(() -> Observable.just("Hello"))
.flatMap(hello ->
Observable.defer(
() -> Observable.just("자바", "파이썬", "안드로이드"))
.map(lang -> hello + ", " + lang))
.subscribe(data -> Logger.log(LogType.ON_NEXT, data));


- fromFuture( ) 연산자 사용

Observable.fromFuture(CompletableFuture.supplyAsync(() -> "Hello"))
.flatMap(hello ->
Observable.fromFuture(
CompletableFuture.supplyAsync(
() -> Arrays.asList("자바", "파이썬", "안드로이드"))
)
.flatMap(langs -> Observable.fromIterable(langs))
.map(lang -> hello + ", " + lang))
.subscribe(data -> Logger.log(LogType.ON_NEXT, data));

특히 fromFuture( )는 just( ) 연산자처럼 복수의 인자 값을 통지하도록 List 형태로 초기화했으며 flatMap( ) 연산자를 추가하여 새로운 Observable을 생성/통지하도록 했는데 이 부분이 RxJava의 목적에 맞게 작성한 것인지 확신이 가지않습니다.

답변 3

·

답변을 작성해보세요.

1

리액티브 프로그래밍이 진입 장벽이 조금 있기는한데 익숙해지면 상당히 재미있습니다. 나중에는 명령형 프로그래밍 방식으로 코드 짜는게 재미가 없을 정도로 말이에요.^^

RxJava 는 사실 안드로이드 개발에서 RxAndroid 형태로 많이들 사용을 하고 서버 애플리케이션에는 스프링 프레임워크 기반으로 Reactor 를 제일 많이 사용하기는한데 중요한건 리액티브 프로그래밍의 개념을 잘 이해하는것이라고 생각해요.

새 강의가 오픈되면 공지를 드릴 예정이라서 금방 알게 되실거에요.

새 강의는 지금도 틈나는대로 작업을 하고있는데 일과 육아를 병행하고있다보니 오픈 일정이 정확히 이때다 라고 말씀을 드리기가 좀 그렇네요.

최대한 빨리 오픈 되도록 노력해보겠습니다.

감사합니다!

감사합니다! 열심히 공부할게요!

1

안녕하세요? 답변이 좀 늦어서 죄송합니다. 주말에는 하루종일 아기랑 같이 있다보니 답변이 늦었는데 양해 부탁 드릴게요.

질문 하신 부분에 대해서 간단히 답변을 드리자면,

리액티브 프로그래밍을 사용하는 이유 중에 하나가 바로 복잡한 비동기 프로그래밍을 쉽게 사용하기 위함인데요. 위에 적어 주신 코드만 보면 물론 저렇게 동일한 연산자를 이중으로 구성해도 안된다는 규정은 없긴한데요. 하지만 특별한 이유가 없다면 위와 같이 구성을 한다면 코드가 상당히 복잡해 보일것 같습니다.

만약에 시간이 많이 걸리는 여러개의 작업들을 중첩해서 수행해야한다면 위 코드처럼 중첩해서 사용을 할 수 있을테지만 그게 아니라 동일한 작업을 수행하는데 같은 연산자를 한번 더 사용을 한다면 불필요한 일이될것 같습니다.

예를 들어 서울에 본사가 있는 서점과 각 시도 별로 지점이 있고 그 지점 하위에 구 별로 대리점이 있는 서점들이 각각 서버를 가지고있을때, 본사에서 시도별 서버에게 도서 판매와 관련된 통계 즉, 시간이 많이 걸리는 요청을 하고 시도별 서버에서는 역시 각 구별로 도서 판매와 관련된 요청을 하는 이런 상황이 생긴다면 말씀 하신대로 Future 같은 중첩 코드가 발생될 수 있을거라 생각됩니다.

RxJava 강의에는 리액티브 프로그래밍을 어떤 애플리케이션에 사용하면 좋을지 자세한 언급이 없었는데 올해 안에 오픈할 리액터 강의에는 그 이유가 어느 정도 설명이 되어있습니다. 제가 나중에 집에 들어가면 관련 자료 첨부 드릴게요.

밖에 있어서 더 자세히 설명드리지 못해서 죄송합니다.

궁금 하신 내용이 있으면 편하게 또 질문 주세요.

감사합니다.

0

천천히 답변해 주셔도 되는데 빨리 답변을 주셔서 감사합니다ㅜㅜ

강사님의 강의를 시작으로 리액티브 프로그래밍에 재미가 붙어 이것저것 다뤄보다 보니 궁금한 점이 많아지네요

그럼에도 불구하고 친절하게 답변해 주셔서 감사합니다!

p.s. 추후에 개설하실 강의도 너무 기대됩니다! 빨리 나왔으면ㅜ 언제쯤 개설되나요..?
p.s. 2 혹시 이메일 주소를  알려드려야 할까요?