[RxAndroid] Basics: Part 1 – (1)

RxJava를 공부하면서 참고한 사이트를 번역(70%) + 나름의 이해한 내용(7%)으로 이루어진 포스팅입니다. 번역하기 애매한 것들이나, 하지 않는 게 더 자연스러울 문장들은 생략하였습니다.

참고한 사이트 : [번역]RxAndroid Basics: Part 1
RxJava with Android -1- RxJava 사용해보기

Welcome friend! So glad to see you! 너는 RxJava에 대해서 그리고, 이것이 Android에서 어떻게 적용되는지 궁금하다. 아마도 너는 이것이 사용되는 것을 몇몇 곳에서 봤겠지만, 너는 여전히 혼란스럽고 설명을 원한다.Well look no further!

내가 처음 RxJava를 접했을 때 나는 대부분 이것에 대해 Cargo coding[코드에 대한 이해없이 복붙]을 했다. 어떤 부분은 이해가 되었지만, 나는 기본 원리들에 대해 깊은 오해를 했다.또한, 나는 도대체 무슨 일이 일어나고 있는 지에 대해서 설명하는 좋은 예시의 부족함에 좌절했다.  RxJava를 완벽하게 이해하기 위해서, 나는 엄청나게 몰두했고, 많은 시도와 오류를 경험해야만 했다.

In an effort to save you, the cherished reader, some leg work, 나는 내가 발견한 것에 기인하여 몇몇의 예시를 서둘러 준비했다.  The hope is these examples will provide you with the necessary knowledge to begin using RxJava in your Android apps.

이 예시들은 완전한 기능을 하는 sample app으로 이곳에서 모두 찾을 수 있다.  각 예시의 처음에, 뒤따르는 code snippets이 있는 명확한 활동을 링크로 걸겠다. 나는 예시를 두 부분으로 나누기로 정했다. 첫번째 부분에서는, 우리는 RxJava의 사용에, 특히 비동기식 data load에, 초점을 맞춘다. 두번째 부분에서는 advanced usage patterns에 대해서 알아본다.

 

Some Concpets

nitty gritty[핵!심!]으로 들어가기에 앞서, 기초적인 개념들부터 시작하자. RxJava는 두가지가 핵심이다: ObservablesObservers. Observables are said to “emit” values. Their counterpart, Observers, watch Observables by “subscribing” to them.Observable들은 값들을 “방출”한다. 그것들에 대응하는 Observer들은 Observable들을 “구독”함으로써 감시한다(지켜본다).

rxJava

Observers는
1. Observable이 값을 방출할 때,
2. 그 Observable이 오류가 발생했다고 할 때,
3. 또는 그 Observable가 더이상 방출할 값이 없다고 할 때,
행동을 취한다. 이 세 가지의 모든 행동들은 Observer interface에서 압축된다. 이에 해당하는 함수들은
onNext(), onError(), and onCompleted() 이다.

위의 내용들을 명심하면서, 몇 개의 예시들을 살펴보자.

Example 1: The Basics

색깔의 목록(list)을(를) 간단하게 보여줄 수 있는 Activity를 만들어보자. 우리는 하나의 값(a list of strings) 을 방출하고, 완료하는 Observable 만들 것이다. 우리는 방출된 값을 목록(list)을(를) 구성하는 데 사용한다. 우리는 이것을 Observable.just() 를 사용해서 한다. This method creates an Observable such that when an Observer subscribes, the onNext() of the Observer is immediately called with the argument provided to Observable.just(). onComplete()Observable이 더 이상 방출할 값이 없기 때문에 불려진다.

ObservableListString listObservable = Observable.just(getColorList());

Note that getColorList() is a non-blocking method call. This may not seem important now, but we’ll come back to it later.

다음으로, 우리는 Observable을 감시하는 Observer를 만든다:

listObservable.subscribe(new ObserverListString() { 

   @Override
   public void onCompleted() { }

   @Override
   public void onError(Throwable e) { } 

   @Override
   public void onNext(ListString colors) {
       mSimpleStringAdapter.setStrings(colors);
  }
});

This is where the magic happens. As mentioned above,  upon subscribing to the Observable with the subscribe() method the following happens immediately, in this order:

Observable을 subscribe()method로 구독하자마자, 아래 내용이 순서대로 즉시 발생한다.

  1. The onNext() method is called and the emitted list of colors is set as the data for the adapter.
  2. Since there is no more data (we only gave our Observable a single value to emit in Observable.just()), the onComplete() callback is called.

나는 용어에 따르면 Observable은 subscription에 달려있음에 대해서 생각하는 것이 유용한 것을 알았다. 사실, Observables는 주로 그들의 subscription에 따른 행동에 의해 정의된다. Let’s take care to remember this, as it will come in handy later. I’m going to state it again since it’s so important:

Observables are primarily defined by their behavior upon subscription.

우리는 onComplete() method를 공백으로 두었기 때문에, 이런 경우에 Observable이 완료되었을 때언제 발생했는지에 대해서는 신경쓰지 않아도 된다. 우리는 onError() method 또한 비어있기 때문에,오류를 받을 방법도 없다.

모든 것이 지나치게(overkill) 보일 수도 있다. We could have just set the color list on our adapter directly. But with this in mind, let’s take a look at something a little more interesting.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s