인프런 커뮤니티 질문&답변

권윤정님의 프로필 이미지
권윤정

작성한 질문수

Kevin의 알기 쉬운 RxJava 1부

변환 연산자 (1)

flatMap, concatMap 예제 코드에서 질문입니다.

작성

·

263

1

안녕하세요. 강의 너무 잘 듣고 있어요.^^

제가 잘 이해하고 있는지 확인차 질문드립니다.

flatMap이나 concatMap에 Observable.interval에서 

period를 0으로 주면 publisher가 데이터를 발행한 즉시 take, skip, map operator를 실행하게 되고

period를 0보다 크게 주면 데이터가 도착했더라도 주어진 시간만큼 기다렸다가 take, skip, map 처리를 실행한다 라고 이해하면 될까요?

답변 1

1

Kevin님의 프로필 이미지
Kevin
지식공유자

안녕하세요? 업무 중이라서 답변이 조금 늦었네요.

윤정님께서 이해하고 계시는게 맞기도 한데 저한테 얘기하신 문장에서 조금 오해의 소지가 있는것 같아서 부연 설명을 잠깐 드리자면, interval 연산자의 파라미터인 period 값은 다운스트림(Downstream) 즉, interval 연산자의 아래쪽에 있는  take, skip, map 같은 연산자들이 interval 연산자가 통지한 데이터를 기다리기 위한 대기 시간이 아니라 interval 연산자가 통지하는 데이터의 통지 주기를 의미합니다.

period의 값을 '2'로 주면 interval 연산자 함수에서 2초에 한번씩 0부터 1씩 증가한 숫자를 통지하는 것이죠.

기다린다라는 말의 주체를 따진다면 interval 연산자 함수 자체가 해당 주기만큼 반복해서 기다리는 것이지 take, skip, map 같은 하위 연산자 함수가 기다리는건 아닌것이죠. ^^;

참고로 interval 함수에서 첫번째 통지되는 데이터를 대기없이 즉시 통지하고 싶다면 아래 소스처럼 initialValue 값을 '0'으로 주시면 된답니다.

public class ObservableIntervalExample {
public static void main(String[] args){
System.out.println("# start : "
+ TimeUtil.getCurrentTimeFormatted());

Observable.interval(0,
1000L, TimeUnit.MILLISECONDS)
.map(num -> num + " count")
.subscribe(data -> Logger.log(LogType.ON_NEXT, data));

TimeUtil.sleep(3000);
}
}

답변이 제대로 되셨는지 모르겠네요. 더 질문하실게 있으시면 언제든지 글 남겨주시면 감사드릴게요.

권윤정님의 프로필 이미지
권윤정
질문자

기다린다라는 표현이 적절하지 못하다는걸 깨달았어요. 이부분을 놓쳤다면 다른 개념도 혼동했을거 같아요.

명확하게 다시 한 번 짚어주셔서 감사해요! :)

권윤정님의 프로필 이미지
권윤정

작성한 질문수

질문하기