44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨Kevin의 알기 쉬운 RxJava 1부
defer( ), fromFuture( )도 just( )처럼 여러 인자 값을 받을 수 있는지 궁금합니다.
안녕하세요! 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의 목적에 맞게 작성한 것인지 확신이 가지않습니다.
- 해결됨Kevin의 알기 쉬운 RxJava 1부
flatMapSingle() 메소드에 대하여
안녕하세요, ObservableGroupByExample03, 04에서 등장한 flatMapSingle() 메소드에 대해 몇 가지 질문을 드립니다. 1. 우선 flatMapSingle()과 map()의 마블 다이어그램이 서로 비슷해보입니다. map() 메소드부터 살펴보면 단일 원소 값을 원하는 값으로 변환해주고 있습니다. 그리고 flatMapSingle() 메소드의 마블 다이어그램에서의 함수 내부에 map()과 달리 '→'이라는 표시가 있는데, 저 화살표의 의미가 무엇인지와 이 두 함수 간의 차이점이 무엇인지 궁금합니다. 2. flatMap() 메소드의 리턴 값은 모든 Observable 형태를 허용하고, flatMapSingle()은 Single 형태의 클래스만 허용하는 것이 맞나요? 다음 ObservableGroupByExample04.java 예제에서 public class ObservableGroupByExample04 { public static void main(String[] args) { Observable<GroupedObservable<CarMaker, Car>> observable = Observable.fromIterable(SampleData.carList) .groupBy(car -> car.getCarMaker()); observable .flatMapSingle(carGroup -> Single.just(carGroup.getKey()) .zipWith( carGroup.flatMap(car -> Observable.just(car.getCarName())) .reduce((p1, p2)-> p1 + ", " + p2) .toSingle(), (key, sum) -> key + " : " + sum ) ) .subscribe(System.out::println);} 빨간색으로 표시된 Single 클래스를 flatMapSingle 내에서 시작해야 하는 이유를 알고 싶습니다. 제가 너무 별것도 아닌걸로 질문을 많이 드려서 강사님을 힘들게하는게 아닌가 죄송하네요;
- 해결됨Kevin의 알기 쉬운 RxJava 1부
fromFuture() vs fromCallable() 생성 연산자에 대해
안녕하세요, fromFuture() 생성 연산자가 저한테 와 닫지않아 따로 구글링을 해봤는데요, https://beomseok95.tistory.com/11?category=1029204 해당 링크 글 마지막에 보시면'fromCallable()과 다른점은 결과 값을 받을 때까지 블로킹한다'라고 설명되어있습니다 그래서 이 각각의 연산자들은 서로 비슷한 연산자인데 역할이 다른 것인지 궁금하고, 각 연산자들의 활용되는 예시가 궁금합니다 * fromFuture() 연산자 * fromCallable() 연산자
- 해결됨Kevin의 알기 쉬운 RxJava 1부
함수형 인터페이스 Comparator에 대해
안녕하세요, LegacyInterfaceInterfaceExample.java 예제 @Overridepublic int compare(Car car1, Car car2) { return car1.getCarPrice() - car2.getCarPrice();} 또는 LegacyInterfaceToFunctionalInterfaceExample.java의 (car1, car2) -> car1.getCarPrice() - car2.getCarPrice() 의 내부 동작원리가 어떻게 되는지 궁금합니다. compare 메소드의 리턴 값이 양수, 0, 음수 중의 정수 값일텐데, car1의 price값이 car2의 price값보다 큰 경우(양수)에는 car1 오브젝트가 car2 오브젝트보다 앞에 둔다..이런식인가요? 그리고, List 객체 cars의 각 원소는 어떻게 선택(?)되어 2개의 파라미터로 각각 들어오게 되는건가요?
- 해결됨Kevin의 알기 쉬운 RxJava 1부
Publisher와 Subscriber 간의 프로세스 흐름에 대한 질문
안녕하세요, 먼저, 5:50부터 그림으로 설명하는 Subscriber(소비자)가 subscribe 메소드를 호출하여 '데이터를 구독한다'라고 하셨습니다. 앞서 reactive stream 표준사양의 Publisher 인터페이스 내용에 subscribe 메소드 선언 부분이 있는데, 마치 Subscriber 객체가 subscribe() 메소드를 호출하는 식으로 들려서 잘 이해가 되지 않습니다; (이후 설명해주신 흐름에 대해서도 Publisher 객체가 onSubscribe(), onNext()를 호출한다라는 것처럼 들립니다; 조금만 더 자세하게 설명해 주세요ㅜ
- 미해결Kevin의 알기 쉬운 RxJava 1부
flatMap, concatMap 예제 코드에서 질문입니다.
안녕하세요. 강의 너무 잘 듣고 있어요.^^ 제가 잘 이해하고 있는지 확인차 질문드립니다. flatMap이나 concatMap에 Observable.interval에서 period를 0으로 주면 publisher가 데이터를 발행한 즉시 take, skip, map operator를 실행하게 되고 period를 0보다 크게 주면 데이터가 도착했더라도 주어진 시간만큼 기다렸다가 take, skip, map 처리를 실행한다 라고 이해하면 될까요?
- 미해결Kevin의 알기 쉬운 RxJava 1부
CarRepairShop에 대한 예제 코드를 볼 수 있을까요?
안녕하세요. 먼저 RxJava에 개념을 잡는데 좋은 강의를 해주셔서 감사합니다. 많은 도움이 되고 있습니다. 혹시 CarRepairShop에서 Future를 리턴하는 getCarRepairCostAsync 메서드에 코드를 확인할 수 있을까요? Future를 사용해본적이 없어서요...ㅠ 확인 부탁드립니다.
- 미해결Kevin의 알기 쉬운 RxJava 1부
딜레이 예제 2에서 flatMap과의 차이는 무엇인가요?
delay함수 내에 sleep을 넣지 않으면 구동하는 내용 자체는 flatMap과 같은데 혹시 그 둘의 차이점에 대해 알 수 있을까요? 실제로 예제에서도 flatMap으로 수정해봐도 동일하게 구동하는것을 알 수 있었습니다.
- 해결됨Kevin의 알기 쉬운 RxJava 1부
groupby 질문있습니다!
groupby 연산자를 사용하면.. db 쿼리 처럼 특정 컬럼기준으로 합계를 구한다던가.. 계산된 데이터를 확인하는 용도가 아닌거 같은데요.. groupby 를 사용해도 결국엔 filter 연산자를 사용해서 내가 원하는 데이터를 걸러내야 하는거 같은데요.. 차라리 이러면 생성자로부터 통지받은 데이터를 애초부터 groupby 를 사용하지 않고 filter 연산자로만 걸러내는방식이랑 어떤점이 다를까요?
- 미해결Kevin의 알기 쉬운 RxJava 1부
전체 소스코드 다운로드 주소 하이퍼링크 수정요청
안녕하세요~! 강의자료PPT 마지막장 전체소스코드 다운로드 주소 하이퍼링크가 디자인패턴으로 되어있네요. rxjava 주소로 수정 바랍니다.
- 미해결Kevin의 알기 쉬운 RxJava 1부
RxJava 2부 예정일은 언제쯤 될까요?
안녕하세요. 매일 들어와서 확인하고 있는데, 혹시 예상하시는 날짜가 있으실까요? ㅎㅎ
- 해결됨Kevin의 알기 쉬운 RxJava 1부
장표 오타 제보입니다.
안녕하세요 강의 잘 보고 있습니다. ㅎㅎ 퀴즈 3번 에 `List<Integer` 에 `>` 이게 빠졌습니다
- 미해결Kevin의 알기 쉬운 RxJava 1부
ReactiveX의 Observer Pattern에 대한 생각 공유
ReactiveX → Observer Pattern? reactivex.io 홈페이지에 보면 다음과 같은 말이 있습니다. "ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming." 여기서 Observer Pattern이라는 말을 보고 이런 저런 생각이 들었는데요.왜 여기서 Publish-Subscribe Pattern이 아니라 Observer Pattern일까? 강의에서 분명 Publish / Subscribe 를 썼던 것 같은데..그리고 Apache Kafka와 뭔가 비슷한 것이 있는 것 같은데, 어떤 점이 다를까. 이런 저런 생각을 했습니다. Observer Pattern vs Publish-Subscribe Pattern 그 결과, Observer Pattern과 Publish-Subscribe Pattern은 다르다는 것을 알게 됐고, 다음 그림이 이해하는데에 도움이 됐습니다. 제가 이해한 바로는 Reative Streams interface는 Observer Pattern을 바탕으로 만들어진 것이고, Apache Kafka 와 같은 메세지 큐들은 Publish-Subscreibe Pattern을 바탕으로 만들어진 것이라고 이해를 했습니다. 가장 큰 차이점은 Observer Pattern은 Subject(Observable)와 Observer(Subscriber)가 서로 알아야한 다는 것이고 (Coupled),Publish-Subscreibe Pattern은 Publisher(Producer), Subscriber(Consumer) 는 서로 알 필요가 없고, 메세지 인터페이스만 알면 된다는 것이죠 (Decoupled). 따라서 Observer Pattern은 Subject가 직접 Event 발생을 Observer들에게 알려줘야합니다. 반면에 Publish-Subscribe Pattern은 Publisher는 이벤트를 Event Channel에 통지하기만 하면 되고, Subscriber는 Event Channel로부터 메세지를 가져와서 처리만하면 된다는 것입니다. 즉, Publisher-Subscriber는 서로의 존재에 대해서 모르고 자신의 역할만 수행하면 되는 것이지요. Reactive Streams 인터페이스를 왜 Publish-Subscreibe Pattern이 아니라, Observer Pattern을 바탕으로 만들었는 지는 제 이해도가 부족해서 아직 온전히 이해할 수는 없지만 충분히 많은 공부가 되었습니다. To Kevin 이 주제는 Kevin님이 계획하신 수업 내용의 방향성과 다소 차이가 있는 것 같지만, 저와 같은 고민을 할 다른 수강생들을 위해서 공유합니다. 한번 생각해볼만한 주제인 것 같아서 공유드립니다! (강의로 찍어달라는 말씀은 아닙니다. 단지 공유하고 싶어서..ㅎ) Reference - https://medium.com/@thanhprofession/architecture-overview-observer-pattern-vs-publish-subscribe-pattern-772e7dd9db83 - https://softwareengineering.stackexchange.com/a/286921
- 미해결Kevin의 알기 쉬운 RxJava 1부
질문은 아니고, 건의사항입니다.
14:51 부분에서 retry가 실패한 건에 대해서만 재시도하는 것이 아니라, 처음부터 다시 시도 한다는 것을 강조해주시면 더 좋은 수업자료가 될 것 같습니다. 얼핏 retry라는 이름만 생각했을 떄는 실패한 건만 다시 시도한다고 생각이 들었는데, Marble Diagram을 다시한번 잘 살펴보니 아예 처음부터 다시 시도하더라구요. 물론 뒷부분 코드 설명에서 잠깐 설명해주시는데, 예외가 발생하는 부분이 가장 첫 항목(0)이다보니 이러한 내용을 담기에 조금 아쉬운 것 같습니다. 제가 괜히 긁어 부스럼 일으키는게 아닌가 싶지만, 한번 고려해주시면 감사하겠습니다!
- 미해결Kevin의 알기 쉬운 RxJava 1부
이해가 잘 안가서 질문하나 드려요.
DROP_LATEST 의 경우 강사님의 설명에서는 onBackPressureBuffer의 첫번째 매개변수인 capacity에 128 의 값을 넣으면 127개까지 정상적으로 발행이 되고 그 후에 나오는 overflow라는 메시지를 보면서 128, 129 가 오버플로 되고 있다고 설명을 하셨습니다. 그리고 그 오버플로우 돼서 나간 값인 128, 129 가 다른곳에 저장 되어있다가 버퍼에 들어온다고 말씀하셨습니다. (버퍼를 지정했는데 그 버퍼 외의 공간에 overflow된 값을 저장하는 것도 말이 안됨) 하지만 이게 맞지 않는 것 같습니다. 일단 127까지(capacity에 무관) 값이 발행되면 그 이후에 들어오는 값들을 capacity만큼 버퍼에 쌓게 됩니다. 현재 발행 속도는 1ms 이므로 0.001초마다 발행이 되어야하죠. capacity를 256으로 하였다면 256만큼 버퍼에 쌓여야하니 대략 0.256초 이후에 오버플로우가 발생 할 겁니다. 0.257 이후에 오버플로우가 발생합니다. 그리고 255 이후인 값들은 들어오지 못하고 최신값부터 버려지겠죠. 127+255 는 정확히 382 입니다. 여기까지 버퍼에 들어가서 순차적으로 처리하겠죠. 그 이후는 오버플로우 되어서 최신의 데이터가 삭제 되니. 이렇게 382에서 583으로 점프합니다. 해당 부분의 강의가 어떻게 하려고해도 이해가 안돼서 검색을 해보니 저런 의미로 설명이 되어있더라고요. 여기에 대한 명확한 설명을 부탁드립니다. 44,000원 주고 강의를 신청했는데 초장부터 잘못된 정보로 강의를 듣다보니 믿음이 좀 깨집니다. 정확한 답변 부탁드리겠습니다.