전체 글256 Coroutine Flow(1) - Flow 란 Coroutine의 Flow는 데이터 스트림이며, 코루틴 상에서 리액티브 프로그래밍 지원 하기 위한 구성 요소이다. 이를 이해하기 위해서는 먼저 리액티브 (반응형) 프로그래밍이 무엇인지, 그리고 Flow가 리액티브 프로그래밍에 대응하여 어떠한 역할을 하는지를 알아야 한다. 리액티브 프로그래밍이란?리액티브 프로그래밍이란 데이터가 변경 될 때 이벤트를 발생시켜서 데이터를 계속해서 전달하도록 하는 프로그래밍 방식을 뜻한다. 기존 명령형 프로그래밍에서는 데이터의 소비자는 데이터를 요청한 후 받은 결과 값을 일회성으로 수신한다. 하지만, 이러한 방식은 데이터가 필요할 때마다 결과 값을 매번 요청해야 한다는 점에서 매우 비효율적이다. 리액티브 프로그래밍에서는 데이터를 발행하는 발행자가 있고 데이터의 소비자는 데이.. 2023. 6. 27. [Hilt] 프로젝트에 의존성 주입(DI) 적용해보기 - Hilt + Retrofit 1. 의존성 주입build.gradle(Project)plugins { ... ... id 'com.google.dagger.hilt.android' version '2.41' apply false}build.gradle(Module)plugins { ... id 'dagger.hilt.android.plugin'}android { ... ... kapt { correctErrorTypes true }}dependencies { ... ... // Hilt implementation 'com.google.dagger:hilt-android:2.41' kapt 'com.google.dagger:hilt-compi.. 2023. 6. 27. [Hilt] Dagger Hilt로 안드로이드 의존성 주입하기 Dependency Injection의존성 주입(Dependency Injection)은 여러 컴포넌트간의 의존성이 강한 안드로이드에서 클래스 간 의존성을 낮춰준다.객체 생성 시 클래스 간 의존성이 생기게 되는데, 객체의 생성을 클래스 내부에서 하는게 아니라 클래스 외부에서 객체를 생성하여 주입시켜주는 디자인 패턴을 말한다.즉, 아래와 같이 정리할 수 있다. 의존성 주입은 클래스 외부에서 객체를 생성하여 주입하는 것! A가 B를 의존한다는 표현은 어떤 의미일까? 추상적인 표현이지만, 토비의 스프링에서는 다음과 같이 정의한다.의존대상 B가 변하면, 그것이 A에 영향을 미친다. 즉, B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다.예를 들면, Car라는 클래스는 Engine이라는 .. 2023. 6. 25. RxJava + Retrofit으로 Http 통신하기 이해를 돕기 위해 2가지의 예제를 통해 RxJava의 실습 코드를 포스팅 해보려고 합니다. 해당 내용은 다른 블로그의 내용을 참조하여 작성했습니다.두개의 예제 모두 RxJava+ Retrofit을 사용한다는 점에서 내용은 유사합니다. 첫번째 예제Java + RxJava2 + Retrofit2 + LiveData를 이용하여 HTTP 웹 통신을 하는데, Json 결과로 주고 받는 내용입니다.LiveData를 가져다 사용함으로써 Acitivty에서 깔끔한 코드를 구성할 수 있는 것 같습니다.완성된 예제는 https://github.com/keepseung/Country-MVVM/tree/02-Add-Retrofit-Rxjava 에서 볼 수 있습니다. App 모듈의 build.gradle은 아래와 같은 라이브러.. 2023. 6. 20. RxJava (12) - Backpressure와 Flowable Backpressure와 FlowableRxJava에는 Backpressure라는 개념과 이를 처리하는 Flowable class가 존재한다.Backpressure가 무엇이고 Flowable은 어떻게 쓰는 것인지 알아보자. 배압(Backpressure)배압이란 데이터 생산과 소비가 불균형적일 때 일어나는 현상이다. 만약 10,000개의 데이터를 0.1초마다 발행하고, 소비는 10초마다 한다면 소비와 관계없이 데이터는 스트림에 계속 쌓이게 된다. Observable이 데이터를 발행하는 속도를 Observer의 소비 속도가 따라가지 못하는 것이다. 이는 결국 메모리가 overflow되고 OutOfMemoryError로 이어져 앱이 터질 것이다. 이러한 현상을 배압(Backpressure)이라고 하며 RxJa.. 2023. 6. 18. RxJava (11) - 스케줄러 스케줄러RxJava의 스케줄러는 RxJava의 코드가 어느 스레드에서 실행될 것인지 지정하는 역할을 한다. RxJava만 사용한다고 비동기 처리가 되는 것이 아니라, 스케줄러를 통해 스레드를 분리해주어야 비동기 작업이 가능한 것이다. 스케줄러의 지정은 RxJava의 subscribeOn과 observeOn 연산자를 통해 가능하다. subscribeOn은 Observable이 데이터 흐름을 발생시키고 연산하는 스레드를 지정할 수 있고, observeOn은 Observable이 observer에게 알림을 보내는 스레드를 지정할 수 있다. RxJava의 큰 장점은 특정 스케줄러를 사용하다가 다른 스케줄러로 변경하기 쉽다는 점이다.(1) 세번째 subscribeOn 연산자에 의해 처음 데이터 발행은 파란색 스레.. 2023. 6. 18. 이전 1 ··· 37 38 39 40 41 42 43 다음