전체 글
-
RxJava: Subject, PublishSubject, BehaviorSubject개발/안드로이드 2020. 2. 15. 17:14
0. Subject RxJava에서 Subject 클래스는 구독하고 있는 관찰자(Observer)에게 새로운 값을 전달 할 때 사용하는 클래스다. 따로 Observable로 새로운 값을 만들 필요 없이 Subject 객체에 내장된 onNext 함수로 새로운 값을 옵저버에게 전달할 수 있기 때문에 짧은 코드로도 reactive하게 구현하는 것이 가능하다. 안드로이드에서 제공하는 LiveData와 유사한 역할을 한다. 아래 코드는 Subject 클래스중 하나인 PublishSubject를 이용해서 새로운 값을 갱신하는 예제다. class Person { var publishName: PublishSubject = PublishSubject.create() } val person = Person() perso..
-
RxJava: defer, fromCallable개발/안드로이드 2020. 2. 15. 16:16
1. defer Observable 클래스내에 포함된 defer() 함수는 관찰하고 있는 대상의 값을 구독한 이후 시점부터 볼 때 사용한다. 즉 subscribe 함수가 불린 시점부터 대상의 값을 관찰한다. 좀 더 이해를 쉽게 하고자 Person이라는 클래스를 만들어봤다. class Person { var name: String = "None" fun observableName(): Observable = Observable.just(name) fun observableDeferName(): Observable = Observable.defer { Observable.just(name) } } Person 클래스에는 수정이 가능한 name 변수와 name을 Observable로 변환해주는 observab..
-
RxJava: mapper function returned null 에러개발/삽질 기록 2020. 2. 14. 17:10
RxJava로 여러 객체의 변화를 보고 있다 보면 아래 파란 버그 처럼 The mapper function returned a null value 에러를 보게되는 경우가 종종 있다. 이 경우는 Observable 객체 내부의 map 함수에서 null을 리턴해주고 있기 때문에 발생한다. 앱이 죽는 크래쉬 에러까지는 아니지만 RxJava에서 null이 되는 경우에 대해 에러 로그를 출력한 만큼 map 함수에서 null이 발생할만한 경우를 사전에 막는 것이 좋다
-
코틀린 apply, also, let, run, with개발/안드로이드 2020. 2. 9. 14:21
자바에 비해 코틀린이 가지는 가장 큰 장점은 코드를 간결하게 작성 할 수 있는 것이라고 생각하는데 모든 객체에 기본적으로 제공하는 범위함수인 apply, also, let, run, with 들이 이 이점을 살리는데 큰 도움이 된다. 이 함수의 차이점에 대해서 설명한 글은 코틀린 공식 문서도 있고 다른 개발 블로그에도 무수히 많지만, 범위 함수에서 강조하는 수신객체와 람다식과 관련된 내용은 문서를 읽는 것 보다는 직접 코드를 짜면서 체험해 볼 때 이해하기가 쉽다. 이번 포스트에서는 apply, also, let, run, with를 언제 사용해야하는지에 대해서 수신객체에 관련된 내용을 제외하고 사용이 필요한 경우만 간략하게 소개해보려고 한다. 1. apply apply는 객체의 property 값을 적용..
-
수직으로 스와이프 가능한 ViewPager 만들기개발/안드로이드 2019. 12. 7. 16:07
브런치나 틱톡처럼 수직으로 스와이프 해서 화면을 넘길 수 있는 ViewPager를 만들려고 인터넷에 검색해보면 ViewPager 클래스에서 상속받는 일부 함수들을 변경하는 답변이 많다. 그런데 대부분의 답변으로 시도해본 결과 아래 이미지처럼 스무스하게 스와이프가 되지 않는 문제가 있었다 0. 기존 ViewPager 클래스의 문제점 원인은 화면을 넘기는 부분을 담당하는 코드가 안드로이드 내부 라이브러리인 ViewPager 클래스 내에 있고 이쪽 코드는 수직으로 넘기는 걸 고려하지 않게 구현되어 있기 때문이다. ViewPager에서 일부 변수들을 오버라이드 할 수 있도록 하지 않았을 까 하는 일말의 기대가 있었지만 스와이프시 넘기는 부분의 threshold 값의 역할을 하는 변수는 오버라이드 할 수 없는 p..
-
RxJava - flatMap개발/안드로이드 2019. 11. 30. 15:23
RxJava에는 유용한 함수들이 많지만 그중에서 가장 많이쓰고 쓸모있는 것을 고르라면 나는 flatMap을 고르고 싶다. 시중의 RxJava/RxAndroid 강의에서도 다른 함수와 달리 flatMap을 소개 할 때는 분량을 길게해서 소개하는데 이해하기는 어렵지만 그만큼 쓰임새가 많아서 그런 것 같기도 하다. 1. flatMap flatMap은 Observable 작업을 여러번 연계해서 사용할 때 사용하는 API다. 그러나 이렇게 추상적인 말로 설명하면 쉽게 와닿지가 않는다. 구체적인 예시를 통해서 살펴보도록 하자. 2. flatMap 예시 네이버 뉴스 페이지에서 특정 기사를 클릭하면 안드로이드 앱에선 기사의 텍스트, 사진 또는 동영상, 좋아요 개수, 댓글 정보 그리고 기사의 광고를 서버로부터 읽어올 것..
-
RxJava - Create 함수개발/안드로이드 2019. 8. 11. 13:36
앞서 작성한 포스트에선 Observable의 역할이 어떤 데이터를 Observer가 처리할 수 있도록 포장해주는 역할 이라고 설명했다. Observable은 데이터를 관찰 할 수 있는 형태로 만들 기 위해 여러 가지 오퍼레이터 함수를 가지고 있다. 이번 포스트에선 이중에서 대표적으로 사용되는 것들만 소개해보려고 한다. 1. create 백그라운드 스레드에서 옵저버가 처리할 넘겨주는 방법. 아래 코드를 보면 create 함수의 인자로 익명 ObservableOnSubscribe 클래스를 선언하고 이 안의 오버라이드 함수 인자인 emitter 변수에 onNext로 0~9까지 값을 넣어 호출 하는 것을 볼 수 있다. Observable observable = Observable .create(new Obser..
-
RxJava - Observable, Observer개발/안드로이드 2019. 8. 10. 14:52
좀더 리액티브한(reactive) UI를 만들기 위해서 프로젝트에 RxJava, RxAndroid를 도입하면서 가장 어려웠던 점은 Observable과 Observer 클래스를 개념적으로 이해하는 것이었다. 옵저버 패턴을 응용한 라이브러리이기 때문에 익숙할 것이라고 여러 문서에서 설명하고 있는데 애초 옵저버 패턴을 많이 써보지 않았고 또 디자인 패턴 책을 여러 번 보고 난 뒤에 문서를 읽어봐도 쉽사리 와닿지 않았다. 여러 번의 블로그 방문과 삽질을 반복한 후 다행히 유튜브 강좌를 통해서 어느정도 개념을 잡을 수 있었다. 혹시나 나처럼 어려움을 겪고 계신 분은 Coding with Mitch 라는 유튜브 채널 강좌를 들어보시면 도움이 될 것 같다. 모두 듣고 소화하는데 하루 정도 소요되는데 개인적으로 충분..