본문 바로가기

Language

(35)
[RxJava] 6장. 안드로이드의 RxJava 활용 2 - RecyclerView 클래스 RecyclerView 클래스 리스트 뷰(ListView)의 장단점을 보완한 위젯. 한정된 수의 뷰를 유지해서 매우 효율적으로 스크롤 할 수 있는 큰 데이터 세트를 표시하기 위한 컨테이너. 서브 클래스인 LayoutManger를 이용하여 뷰를 정의, Adapter 클래스를 이용하여 DataSet에 맞는 ViewHolder 클래스를 구현할 수 있다. RecyclerView와 함께 사용하는 주요 클래스 Adapter : 데이터 세트의 아이템을 나타내는 뷰를 생성 ViewHolder : 재활용 뷰에 대한 모든 서브 뷰를 저장 LayoutManager : 뷰에 있는 아이템을 배치하고 관리 ItemDecoration : 아이템을 꾸미는 서브 뷰를 제어 ItemAnimation : 아이템을 추가, 정렬, 제거할 때..
[RxJava] 6장. 안드로이드의 RxJava 활용 1 - RxAndroid 소개 RxAndroid 소개 RxAndroid 기본 개념은 RxJava와 동일하다. Observable : 비즈니스 로직을 이용해 데이터를 발행 구독자 : Observable에서 발행한 데이터를 구독 스케줄러 : 스케줄러를 통해 Observable, 구독자가 어느 스레드에서 실행될지 결정. RxAndroid 장점 간단한 코드로 복잡한 병행 프로그래밍이 가능 비동기 구조에서 에러를 쉽게 다룸 함수형 프로그래밍 기법도 부분적 적용 가능 RxLifecycle 라이브러리 안드로이드와 UI 라이프 사이클을 대체한다기보다 구독할 때 발생할 수 있는 메모리 누수를 방지하기 위해 사용한다. 완료하지 못한 구독을 자동으로 해제한다. public class RxAndroidSample extends RxAppCompatActi..
[RxJava] 5장. 스케줄러 스케줄러 비동기로 동작할 수 있도록 이용한다. subscribeOn, observeOn에 스케줄러를 지정하여 데이터의 흐름이 발생하는 스레드와, 처리된 결과를 구독자에게 전달하는 스레드를 분리할 수 있다. String[] data = {"1", "2", "3"}; Observable source = Observable.fromArray(data) .doOnNext(data -> Log.d("Original data = " + data)) .subscribeOn(Schedulers.newThread()) .observeOn(Schedulers.newThread()) .map(data -> "#" + data); source.subscribe(Log::i); CommonUtils.sleep(1000); //..
[RxJava] 4장. 리액티브 연산자의 활용 4 - 조건 연산자 및 기타 연산자 조건 연산자 Observable의 흐름을 제어하는 역할. amb() : 둘 중 어느 것이든 먼저 나오는 Observable을 채택 takeUntil(other) : other Observable에서 데이터가 발행되기 전까지만 현재 Observable을 채택 skipUntil(other) : other Observable에서 데이터가 발행될 때 까지 현재 Observable을 무시 all() : Observable에 입력되는 값이 모두 특정 조건에 맞을 때만 true를 발행. 조건에 맞지 않는 값이 있으면 바로 false를 발행. amb() 함수 여러 개의 Observable 중 하나의 Observable을 선택하는데, 선택 조건은 가장 먼저 데이터를 발행하는 Observable이다. String[] nu..
[RxJava] 4장. 리액티브 연산자의 활용 3 - 결합 연산자 결합 연산자 여러개의 Observable을 내가 원하는 Observable로 결합하는데 사용하는 연산자. zip : Observable에서 데이터를 모두 새로 발행했을 때 그것을 합해준다. combineLatest : 처음에 각 Observable에서 데이터를 발행한 후에는 어디에서 값을 발행하던 항상 최신 값으로 갱신. merge : 최신 데이터 여부와 상관없이 각 Observable에서 발행하는 데이터를 그대로 출력. concat : 입력된 Observable을 Observable 단위로 이어 붙여준다. zip() 함수 각각의 Observable을 모두 확용해 2개 혹은 그 이상의 Observable을 결합한다. 최대 9개의 Observable을 결합할 수 있다. A, B 2개의 Observable을..
[RxJava] 4장. 리액티브 연산자의 활용 2 - 변환 연산자 변환 연산자 만들어진 데이터 흐름을 원하는 대로 변형할 수 있는 연산자. concatMap() 함수 flatMap() 과 매우 비슷하다. flatMap의 경우 인터리빙(interleaving) 현상이 발생할 수 있기 때문에 데이터의 처리가 순차적으로 진행되지 않을 가능성이 있다. 하지만, concatMap의 경우 먼저 들어온 데이터 순서대로 처리하여 결과를 낼 수 있도록 보장해준다. String[] num = {"1", "2", "3"}; Observable source = Observable.interval(100L, TimeUnit.MILLISECONDS) .map(Long::intValue) // interval에서 발행되는 값은 Long 타입이므로, Integer 객체로 변환 .map(index ..
[RxJava] 4장. 리액티브 연산자의 활용 1 - 생성 연산자 생성 연산자 : just(), fromXXX(), create() ... 변환 연산자 : map(), flatMap(), groupBy(), buffer() ... 필터 연산자 : filter(), take(), skip() ... 결합 연산자 : zip(), concat(), merge(), combineLatest() 조건 연산자 : takeUntil(), all() ... 에러 처리 연산자 : onErrorReturn(), retry() ... 기타 연산자 : subscribe(), reduce(), observeOn() ... 생성 연산자 데이터 흐름을 만드는 연산자. Observable을 만드는 연산자라고 생각하면 된다. interval() 함수 일정 시간 간격으로 데이터 흐름을 생성하며, 현재..
[RxJava] 3장. 리액티브 연산자 입문 생성 연산자 데이터 흐름을 만들어내는 함수 create, just, fromArray, interval ... 변환 연산자 어떤 입력을 받아서 원하는 출력 결과를 내는 전통적인 의미의 함수 map, flatmap ... 필터 연산자 입력 데이터 중 원하는 데이터만 걸러낸다 filter, first, take ... 합성 연산자 여러 Observable을 조합하는 역할 오류처리 연산자 onErrorReturn, onErrorResumeNext, retry ... 유틸리티 연산자 비동기 프로그래밍을 지원 subscribeOn, observeOn ... ​ RxJava의 제네릭 함수형 인터페이스 Predicate : boolean sample(T t). t 값을 받아서 참이나 거짓을 반환 Consumer : ..