묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Kevin의 알기 쉬운 RxJava 1부
Single과 관련해 여쭤보고 싶은 부분이 있습니다!
안녕하세요 선생님! 틈틈이 강의 잘 듣고 있습니다.강의 수강 도중, 궁금한 점이 있어 질문드립니다! Single은 전통적인 client - server 방식의 요청을 처리하는 데 사용한다고 말씀해주셨습니다.실제로 회사에서 single.blocking() 이런 방식으로 처리하는 코드를 본 적이 있는데, single을 해당 의도처럼 사용할 경우, 동기처리 방식에 비해 얻는 이점이 있을까요??제가 아직 생각하기로는 코드는 리액티브이지만 비동기 방식으로 처리하는 것이 아닌 거 같아서요! 또한 강의 영상 3분 정도에서 보여주신 SingleCreateExample 코드에서, 발행자인 Single의 create 메소드의 파라미터인 SingleOnSubscribe<T>가 구현하고 있는 subscribe가 아래 구독자가 구독하는 subscribe() 와 같은 함수가 맞을까요?코드적으로는 둘이 연관이 있어 보여서, SingleObserver<T>와 SingleEmitter<T> 사이의 같은 부모가 있는지 확인 해보았는데 그것두 아니더라구요 ㅠ... 둘이 아예 다른 메소드 인가요??4. 코드를 살펴보다가 RxJavaHooks 라는 유틸성 클래스를 발견하게 되었는데, 함수형 인터페이스들이 막 정의되어 있는 것은 알겠는데 어떻게 해석해야 할 지가 감이 안 잡히더라구요 ㅠㅠ... 혹시 코드를 해석하는데 조언을 주실 수 잇으실까요?..항상 깊게 답변 해주셔서 감사드립니다 :)
-
해결됨Kevin의 알기 쉬운 RxJava 1부
cold/hot publisher 예제 코드와 관련해 질문 드립니다.
안녕하세요! 강의 잘 듣고 있습니다. 본격적인 첫 강의부터 궁금한 점들이 많아 질문 드리게 되었습니다 ㅠ.. 저는 해당 강의를 듣게 된 사유가 웹플럭스 같이 비동기 적으로 처리하는 것에 관심이 많아서 자연스럽게 기본부터 다지고자 해당 강의를 수강하게 되었는데요. 그래서 RxJava 코드가 비동기를 위한 코드라는 인식이 있습니다. 그런데 해당 강의 마지막 부분에 cold/hot publisher 예제 코드에서 콘솔에 데이터가 출려되는 형태를 보면 구독자1이 데이터를 모두 소비하고 구독자2가 그 다음으로 데이터를 소비하는, 동기적으로 처리하는 것처럼 보이더라구요. 혹시 제 생각처럼 동기적으로 처리되고 있는 것이 맞을까요? 그렇다면 사유가 궁금합니다 ㅠRxJava는 사실 단순 pub/sub 형태의 인터페이스를 구현한 구현체에 불과해서 RxJava를 이용해 소스코드를 작성하여도 이걸 비동기적으로 처리하기 위해서는 더 아랫단의 도움을 받아야 하는건지그렇다면 이 코드를 실행하는 was의 영향을 받는건지만약 그냥 java로 실행한다면 비동기적으로 실행할 수 없는 건지아니면 RxJava는 동기적 비동기적으로 소스코드를 작성할 수 있는데, 그냥 현재 예제 코드가 동기적으로 코드를 작성한 것인지아니면 메인 스레드가 구독자1과 2의 역할을 동시에 하고 있기 때문에 순차처리가 되는것인지 또한 비동기에 대한 정의에 대해 여쭤보고 싶습니다.비동기 처리라는 것을 스레드의 동작 방식을 제어하는 것이라고 이해하면 될까요??비동기 처리를 구현하기 위해서는 스레드 제어만 하면 되니까 OS단의 도움을 받지 않고 어플리케이션 단에서 구현을 할 수 있다고 이해해도 괜찮을까요??답변해주시면 감사하겠습니다!
-
미해결Kevin의 알기 쉬운 RxJava 1부
CompletableObserver 클래스의 람다식 표현관련
안녕하세요람다식은 인터페이스안에 구현해야할 메소드가 하나만 있을때 사용 가능한것으로 알고있는데completable.subscribeOn(Schedulers.computation()) .subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable disposable) { // 아무것도 하지 않음 } @Override public void onComplete() { Logger.log(LogType.ON_COMPLETE); } @Override public void onError(Throwable error) { Logger.log(LogType.ON_ERROR, error); } });여기서 CompletableObserver 는 오버라이드 해야할 메소드가 3개나 있는데 어떤 원리로 completable.subscribeOn(Schedulers.computation()) .subscribe( () -> Logger.log(LogType.ON_COMPLETE), error -> Logger.log(LogType.ON_ERROR, error) );이런식으로 람다표현이 가능한건가요?
-
미해결Kevin의 알기 쉬운 RxJava 1부
1강에 예시로 보여주신 ToDoSample 코드에 관해 질문 드립니다!
안녕하세요! 이제 막 RxJava를 배우기 시작하였습니다 ㅎㅎ1강 14:20초 즈음에 예시로 보여주신 ToDoSample.class코드에 대해 질문 드립니다.java app은 main thread가 종료되어도 다른 non-deamon thread가 실행 중이면 app이 종료되지 않는 것으로 알고 있는데,subscribeOn( Schedulers.io() ) 메소드 실행 시, 다른 thread 가 시작하기도 전에 main thread가 종료되어, 실행 중인 thread가 없어져 app이 종료되었다고 파악해야 할까요??subscribeOn( Schedulers.io() ) 메소드를 실행하였음에도 왜 다른 스레드가 실행이 바로 되지 않는 걸까요??
-
해결됨Kevin의 알기 쉬운 RxJava 1부
concatEager( ) 연산자에 관하여
안녕하세요, 해당 강의에서 materialize / dematerialize 파트에서 언급된 concatEager( ) 연산자에 알아보면서 어떻게 사용해야하는 것인지 정확히 알고 싶습니다. - Observable.java (concat 연산자) @CheckReturnValue@NonNull@SchedulerSupport(SchedulerSupport.NONE)public static <T> Observable<T> concat(ObservableSource<? extends T> source1, ObservableSource<? extends T> source2) { ObjectHelper.requireNonNull(source1, "source1 is null"); ObjectHelper.requireNonNull(source2, "source2 is null"); return concatArray(source1, source2);} - Observable.java (concatEager 연산자) @CheckReturnValue@SchedulerSupport(SchedulerSupport.NONE)public static <T> Observable<T> concatEager(ObservableSource<? extends ObservableSource<? extends T>> sources) { return concatEager(sources, bufferSize(), bufferSize());} 위 API 소스를 보다시피 concatEager의 파라미터는 'ObservableSource<? extends ObservableSource<? extends T>>' 타입을 넣어야 한다고 명시가 되어있는데요, 저 모양이 예제 'ObservableMaterialExample02.java'처럼 Observable.just( ... )의 파라미터에 Observable 넣어야하는 형태인건가요? 저런 타입이 어떠한 모양인지 감이 안잡혀서 여쭤봅니다.