분류 전체보기 (18) 썸네일형 리스트형 [RxJava3] Reactive 연산자 - 2.필터 연산자, 결합 연산자 이번 포스팅에서는 이전 생성, 변환 연산자에 이어서 필터 연산자, 결합연산자, 그리고 그 외 자주 사용하게 될 연산자들에 대해서 알아보고자 합니다. 1. Filter(필터) 연산자 Observable에서 아이템을 선택적으로 발행하는 연사자입니다. 대표적인 연산자에는 filter(), first(), 그리고 debounce(), sample() 이 있습니다. filter() : 조건이 true가 되는 데이터만 발행. 직관적인 함수명대로 predicate 가 true가 되는 조건의 아이템에 대해서만 발행을 하는 함수입니다. @SchedulerSupport(SchedulerSupport.NONE) public final Observable filter(@NonNull Predicate [RxJava3] Reactive 연산자 - 1.생성 연산자, 변환 연산자 ReactiveX 연산자는 Observable을 생성도 하고, 변환도 하며, 흐름제어를 하는 기능도 있는 함수 입니다. Rx 연산자를 사용할 줄 안다는 것은 Observable 데이터 흐름을 다룰 줄 안다는 것이고 즉, Reactive 프로그래밍을 하고 있다는 것이라고도 볼 수 있겠네요. (다음 포스팅에서 스케줄러 등 중요한 개념들을 더 다루어야하기는 하지만) 다양한 연산자들이 있지만, 공식문서에서 그룹핑한 내용을 보면 Creating Observables, Transforming Observables, Filtering Observables, Combining Observables 등이 있습니다. 하나씩 천천히 알아봅시다. 1. Creating (생성) 연산자 이전에 다루었던 create(), just.. [RxJava3] Observable RxJava 의 핵심 중 핵심이라할 수 있는 클래스이자 데이터 흐름에서 데이터 발행을 담당하는 Observable에 대해서 알아보겠습니다. Observable은 3가지 event를 가집니다. onNext : 데이터 발행을 알림 onComplete : 데이터 발행 완료를 알림 onError : 에러 발생을 알림 onError 발생 이후에는 onNext 와 onComplete 가 발생하지 않음. 그러면, Observable은 어떻게 생성할 수 있을까요? just(), fromXX(), create(), interval(), timer(), range() 와 같은 정적 팩토리 함수를 활용하여 생성할 수 있습니다. Observable의 종류는 총 4가지가 있습니다. Observable: 기본 Maybe: 0개 .. [Android] RxJava2 + Retrofit2 RxJava와 가장 많은 조합으로 사용된다고 알고 있는 Retrofit 사용법을 정리해보고자 합니다. RxJava 스타일대로 Retrofit을 사용할 수 있게 해주는 adapter 라이브러리가 RxJava3 버전으로 아직 나오지 않아서 이번 글은 RxJava2 + Retrofit의 조합으로 Android에서 REST API 통신을 하는 방법에 대해 작성하였습니다. RxJava3 정리는 아래 링크에서 확인 가능합니다 :) -> https://dev-eunji.tistory.com/19 역시 가장 빠르게 배우고, 써먹을 수 있는 방법은 직접 해보는 것이기 때문에 Fake REST API 사이트, https://jsonplaceholder.typicode.com 의 json 데이터의 도움을 받아서 테스트 코드.. [Android] WorkManager 0. 개요 WorkManager는 즉시 실행하지 않아도되는 백그라운드 작업을 구현할 때 사용할 수 있다. (즉시 실행이 필요 -> Foreground service) 또한, 앱이 종료 되거나 단말이 다시 시작 되더라도 안정적 실행이 필요한 작업을위한 것이다. 아래와 같이 종속성을 추가하고, Worker와 WorkRequest 를 정의하고 사용하면 된다. 각각에 대해서 알아봅시다 :) 종속성 dependencies { implementation "androidx.work:work-runtime-ktx:2.3.2" // 최신버전을 확인해주세요. } 1. Worker 작업의 단위를 정의 샘플 코드 class MyWorker(context: Context, workerParams: WorkerParameters.. [leetcode 189] Rotate Array https://leetcode.com/problems/rotate-array/ class Solution { fun rotate(nums: IntArray, k: Int) { for (i in 0 until k) { var temp = nums[nums.size-1] for (j in nums.size-1 downTo 1) { nums[j] = nums[j-1] } nums[0] = temp } } } 해결 과정 처음에는 앞에서 뒤로 이동되는 아이템들과 뒤에서 앞으로 오게되는 아이템으로 구분하여 생각을 했고, 규칙을 찾고자 했다. 하지만 "Could you do it in-place with O(1) extra space?" 라는 문제 제안에 따라, 추가 공간을 사용하지 않는 방법에 대해 고민하게 되었고.. [Android] BottomSheet 개요 화면 하단에서 어느 정도 높이로 고정이 되어있지만 손 드래그에 따라 올라가기도, 내려가기도, 또 사라지기도 하는 뷰를 만들고 싶을 때 사용할 수 있는 안드로이드 컴포넌트이다. 종류 일반 (Persistent BottomSheet) Dependency 추가 implementation 'com.google.android.material:material:1.0.0' Persistent BottomSheet 특징 BottomSheet는 1) CoordinatorLayout의 자식으로 적용해야 한다. 2) 모든 레이아웃에 app:layout_behavior 정의로 간단하게 사용 가능하다. * app:behavior_peekHeight: 기본 높이 * app:behavior_hideable: 레이아웃을 아래로.. [leetcode 419] Battleships in a Board https://leetcode.com/problems/battleships-in-a-board/ class Solution { fun countBattleships(board: Array): Int { var count = 0 val result: Int = board.run { forEachIndexed { i, row -> row.forEachIndexed rowForEach@ { j, item -> if('.' == item) { return@rowForEach } else if( i != 0 && 'X' == this[i-1][j]) { return@rowForEach } else if( j != 0 && 'X' == row[j-1]) { return@rowForEach } else { count.. 이전 1 2 3 다음