woong's
RxJava , RxAndroid 사용하기[1 : 흐름 파악하기] 본문
RxJava , RxAndroid 사용하기[1 : 흐름 파악하기]
최근 RXJava , RxAndroid 얘기가 많아 조금씩 학습해 보려 합니다.
이번장에서는 정말 맛보기 정도로만 사용해보려 합니다.
포스트를 끝까지 다 쓸수 있을지 모르겠지만 ,
궁극적으로는 retrofit + RxJava 까지 포스트를 작성해 보려 합니다.
처음에는 어떤점이 장점이 되는지 몰랐지만 , retrofit + RxJava 까지 적용해보니
아 이럴때 이런점이 좋겠구나 하는 생각이 들었습니다.
학습비용이 어느정도 필요하지만 , 조금씩 시간내서 학습하면 , 앞으로 좀더
질좋은 코드를 쉽게 작성할수 있지 않을까 하는 생각이 듭니다.
1.사용준비
RxJava , RxAndroid 를 사용하기 위해서 라이브러리 준비를 해야 합니다.
RxAndroid 내부에 RxJava가 있어 따로 추가를 해주지 않아도 된다고 합니다.
1 2 3 4 5 6 7 8 9 | dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.0.1' compile 'io.reactivex:rxandroid:0.24.0' } | cs |
2. 간단설명
RxJava 는 함수형 프로그래밍 이라고 합니다.
Android 개발자 사이에서 부상되고 있으며 , 저도 학습하는 입장에서 간단하게 어떻게 사용되는지만
설형해보려 합니다 ^^
Observable , Subscriber 가 주로 자주 사용하게 됩니다.
Observable : 아이템 들을 발행
Subscriber : 아이템 들을 소비
3.사용방법
간단하게 Ovservable , Subscriber 가 어떻게 동작하지는 확인해 보겠습니다.
Ovservable 을 생성하였고 , call 익명 함수에서 Next , Completed 를 호출 하였습니다.
이렇게 호출이 되면 Subscriber 는 구독을 합니다.
onNext 에서 구독을 하고 onCompleted 에서 구독을 하여 Log를 보여주게 됩니다.
1 2 3 4 5 6 | onNext : >>> Hello world >>> onCompleted : | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //발행 Observable<String> observable = Observable.create( new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> sub) { sub.onNext(">>> Hello world"); sub.onCompleted(); } } ); //구독을 하며 소비 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onNext(String s) { System.out.println(s); Log.i(TAG, ">>> onNext : " + s); } @Override public void onCompleted() { Log.i(TAG, ">>> onCompleted : "); } @Override public void onError(Throwable e) { Log.i(TAG, ">>> onError : " + e); } }; observable.subscribe(subscriber); | cs |
이렇게 흐름 방법을 알아보았는데 , 간단한 호출만 했을뿐인데 벌써 코드가 굉장히 길어졌습니다.
여러 가지 방법으로 코드를 간소화 할수 있는데 Ovservable 을 간소화 해보도록 하겠습니다.
Ovservable 에는 여러개의 메서드가 내장 되어 있는데 Ovservable.just() 를 사용해 보겠습니다.
Ovservable.just() 는 아이템을 한개만 발행 하고 종료 됩니다.
1 | Observable<String> observable = Observable.just("hello world"); | cs |
다음으로는 Subscriber 를 간소화 해보도록 하겠습니다.
위 Subscriber 를 보면 onNext , onCompleted , onError 가 있습니다. 필요에 따라 필요 할수도 있고
없을 수도 있습니다. 이부분을 분리 할수 있습니다. 분리 할수 있으며 , 사용하고 싶은것만 사용할수 있습니다.
아래 코드는 3부분을 다 사용하였지만 , 기호에 따라 골라서 사용 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Action1<String> onNextAction = new Action1<String>() { @Override public void call(String s) { Log.i(TAG, ">>> onNextAction : " + s); } }; Action1<Throwable> onErrorAction = new Action1<Throwable>() { @Override public void call(Throwable throwable) { Log.i(TAG, ">>> onErrorAction : " + throwable); } }; Action0 onCompletedAction = new Action0() { @Override public void call() { Log.i(TAG, ">>> onCompletedAction "); } }; observable.subscribe(onNextAction, onErrorAction, onCompletedAction); | cs |
여기서 NextAction 만 사용한다는 전제로 포스트를 작성해 보겠습니다.
위의 장황했던 코드가 필요한 부분을 사용하고 코드를 간소화 하니 아래의 코드같이 작성되었습니다.
1 2 3 4 5 6 7 8 9 10 | //발행 Observable<String> observable = Observable.just("hello world"); //구독 Action1<String> onNextAction = new Action1<String>() { @Override public void call(String s) { Log.i(TAG, ">>> onNextAction : " + s); } }; observable.subscribe(onNextAction); | cs |
여기서 Java8 에서 소개된 람다를 사용하여 익명함수를 줄이게 되면
1 | Observable.just(“Hello, world!”) .subscribe(s -> System.out.println(s)); | cs |
위와 같이 코드를 사용할수 있습니다.
하지만 이 포스트는 람다를 배우기 위하기 보다 RxJava에 대해서 소개하니 생략하겠습니다.
결론
여기까지는 간단하게 RxJava 가 어떻게 사용되는지 흐름을 알아보는 정도가 되겠습니다.
어떻게 발행되고 구독이 되는지 , 역할이 분명하게 나뉘는것 같습니다.
아직까지는 어떤점이 장점이 되는지 명확하지 않는것 같습니다.
다음포스트에서 어떤점에서 이점이 있는지 알아보는 포스트를 작성해보려 합니다. ^^
'Develop > Android' 카테고리의 다른 글
Path Menu (0) | 2016.02.14 |
---|---|
RxJava , RxAndroid 사용하기[2 : filter , map 사용] (1) | 2016.02.14 |
Android Java 파일 경로 / 포함하기 (0) | 2016.02.14 |
Android VideoView error 처리하기 (0) | 2016.02.14 |
Android Lambda 사용하기 (0) | 2016.02.14 |