profile
어려울수록 기본에 미치고 열광하라
태그 목록
전체보기 (114)android(26)kotlin(22)swift(21)스위프트(21)iOS(21)RxJava(17)반응형 프로그래밍(16)rxkotlin(16)비동기 데이터 스트림(15)RX(15)CS(13)observable(12)Reactive X(11)코틀린(10)Java(6)reactivex(6)안드로이드(6)coroutine(6)코루틴(5)동시성(5)비동기(5)디자인 패턴(4)Thread(4)JVM(3)Design Pattern(3)RecyclerView(3)Apollo client(3)graphql(3)Android Component(3)TCP/IP(3)View(3)MVVM(2)상속(2)Broadcast Receiver(2)자바(2)정렬 알고리즘(2)Generics(2)멀티 쓰레딩(2)Map(2)RxAndroid(2)추상화(2)취준(2)SOLID(2)OOP(2)context(2)네트워크(2)dependency injection(2)di(2)jetpack(2)제너릭 함수(2)알고리즘(2)lifecycle(2)Observer(2)List(2)garbage collection(2)GC(2)자료구조(2)객체지향 프로그래밍(2)제너릭 클래스(2)카카오페이(2)다형성(2)제너릭(2)service(2)scope function(2)클린 아키텍처(2)회고(2)Adapter(2)의존성 주입(2)Flowable(2)스코프 함수(2)동기화(1)날먹(1)stack(1)소마 면접(1)garbage collector(1)CustomType(1)레포지(1)process(1)data class(1)heap(1)Activity(1)inline function(1)카카오(1)Inflating(1)junit(1)Cache(1)Local Data(1)Handler(1)velog(1)구조화된 동시성(1)Mutext(1)onDraw(1)quicksort(1)delegate pattern(1)callback(1)Hash Collision(1)캡슐화(1)Thread Pool(1)Frameworks(1)연말(1)RecyclerView.Adapter(1)with(1)임계 영역(1)andoird(1)clean architecture(1)input(1)requestLayout()(1)캐시 메모리(1)debounce(1)LRU(1)high order function(1)by(1)BST(1)tistory(1)hasFixedSize(1)Use Cases(1)RxBinding(1)티스토리 단점(1)브로드캐스트 리시버(1)Content Provider(1)composition(1)신입 개발자(1)콘텐트 프로바이더(1)Datastore(1)network(1)scheduler(1)XML(1)고차함수(1)entity(1)ip(1)tcp(1)퀵 소트(1)Looper(1)layout(1)데드락(1)LRU Cache(1)Hashing(1)Open Addressing(1)객체지향 패러다임(1)double linked list(1)test code(1)PendingIntent(1)명령형 프로그래밍(1)CustomTypeAdapter(1)2021년(1)hash function(1)notifyDataSetChanged()(1)Apollo-graphql(1)Application Context(1)꿀팁(1)ANR(1)싱글톤 패턴(1)커스텀 타입(1)DiffUtil(1)Deadlock(1)application(1)onLayout(1)interface(1)Runtime Data Areas(1)when(1)Collection(1)슬라이딩 윈도우(1)Day(1)jetbrains(1)뮤텍스(1)취업준비(1)dagger(1)GitHub 소스코드(1)flow(1)Adapter Pattern(1)HashTable(1)인라인 함수(1)Broadcast(1)가비지 컬렉션(1)Enum(1)VS Code(1)세마포어(1)Process Control Block(1)Chaining(1)inflate(1)소마 지원 팁(1)AAC(1)절차적 프로그래밍(1)Spring boot(1)HashMap(1)inline(1)main thread(1)LayoutInflater(1)이진 트리(1)이진 탐색 트리(1)SharedPreferences(1)수습기간(1)listview(1)환승(1)notification(1)array(1)안드로이드 개발(1)TCP 통신(1)어댑터 패턴(1)Application Not Responding(1)Intent(1)Method Area(1)교착상태(1)github(1)toString(1)Executor(1)ViewHolder(1)병합 정렬(1)EditText(1)다크모드(1)ExecutorService(1)Class Loader(1)mutation(1)view lifecycle(1)SW 마에스트로(1)Android view(1)Kotlin 유용한 함수(1)객체지향 프로그래밍 설계원칙(1)합병 정렬(1)sealed(1)UI Test(1)Field Injection(1)Drivers(1)AlarmManager(1)delegate(1)Critical Section(1)깃허브(1)시간 복잡도(1)Activity Context(1)Android Studio(1)흐름제어(1)운영체제(1)LRU 알고리즘(1)Singleton(1)RxKoltin(1)소프트웨어 마에스트로(1)set(1)run(1)Listener(1)CustomView(1)OS(1)배압현상(1)브로드캐스트(1)스프링 부트(1)ScalarType(1)Native Method Stack(1)비동기 처리(1)function(1)UI thread(1)페이지 교체(1)프로세스(1)유닛 테스트(1)key-value(1)Interface Adapters(1)infix(1)3 Way-Handshake(1)unit test(1)file upload(1)MergeSort(1)VSC(1)서비스(1)Pair(1)Kotlin Function(1)Night(1)다크모드 비활성화(1)Semaphore(1)소마(1)쓰레드(1)패킷 교환(1)소마 코테(1)PublishSubject(1)Wrapper Pattern(1)Subject(1)4-way Handshake(1)apollo(1)옵저버 패턴(1)안드로이드 스타일(1)Backpressure(1)네트워킹(1)PCB(1)Context Switching(1)
post-thumbnail

[RxJava] 팔방미인 Subject 알아보기

Subject 지금까지 Observable, Single, Flowable 등의 데이터 스트림에 대해 알아보았다. 이번 포스팅에서 알아볼 녀석은 Subject 라는 녀석인데, 이는 관찰 가능한 데이터 스트림과 관찰자(구독자)의 성격을 모두 갖고 있는 특이한 녀석이다. 즉 Observable 과 Observer 를 모두 구현한 추상 타입으로, 하나의 소스로부터 다중의 구독자에게 멀티 캐스팅이 가능하다는 특징을 갖고 있다. Observer 를 구현한다는 특징때문에, onNext(), onError(), onComplete() 등의 이벤트를 수동으로 발생하여 구독자들에게 전달해줄 수 있다. 그럼, 다양한 Subject 의 종류 중 몇 가지에 대해 하나씩 알아보도록 하자. PublishSubject PublishSubject 는 가장 단순한 Subject 구현체중 하나이다. 구독자들에게 **이벤

2021년 10월 25일
·
4개의 댓글
·
post-thumbnail

[RxJava] Scheduler 설정하기

Scheduler (스케줄러) RxJava 는 다양한 문제를 해결할 수 있는 범용적인 솔루션이다. 특히 멀티 쓰레딩과 같은 비동기 작업을 효율적으로 구현할 수 있는 환경을 제공해준다. 이는 스케줄러라는 녀석을 활용하게 된다. 스케줄러는 데이터 스트림이 어떤 쓰레드에서 데이터를 발행하는지, 구독자는 어떤 쓰레드에서 이벤트 발생을 통보받는지에 대해 지정해줄 수 있다. RxJava 에서는 Schedulers 클래스에서 제공하는 정적 패토리 메소드를 통해 스케줄러를 설정해줄 수 있다. Scheduler 종류 >### Single 스케줄러 Single 스케줄러는 단일 쓰레드를 생성하여 이를 계속 재사용하는 방식을 활용한다. RxJava 내부에서 쓰레드를 별도로 생성하여, 한 번 생성된 쓰레드를 활용하며 여러 작업을 처리하게 된다. >### IO 스케줄러 이 녀석은 네트워킹 작업이나 **DB 트랜잭션, 파일 시스

2021년 10월 20일
·
0개의 댓글
·
post-thumbnail

[RxJava] Backpressure 대응 전략

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. Backpressure 전략이 필요한 이유 지난 포스팅에서 Observable 데이터 스트림에서 발생할 수 있는 '배압 현상' 이라는 것에 대해 알아보았고, 이를 제어할 수 있는 데이터 스트림인 Flowable 에 대해서도 알아보았다. 그러나, Flowable 에서도 이 배압 현상을 제어하지 못하여 오류 (MissingBackpressureException)

2021년 9월 25일
·
0개의 댓글
·
post-thumbnail

[RxJava] Backpressure & Flowable

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 지금까지 다룬 내용 우리는 Observable 의 개념에 대해 살펴보았고, Observable 로 만들 수 있는 다양한 데이터 스트림의 형태를 익혀보았다. 또한, Observable 데이터 스트림에 체이닝 가능한 편리한 연산자들의 용법에 대해서도 알아보았다. 하지만, Observable 은 한 가지 문제점이 잠재되어 있다. 바로, 배압현상이라는 것이다. 이번 포스팅에선 이 배압현상이 무엇이고 왜 일어나는 지에 관하여 익혀보며, 이를 해결할 수 있는 새로운 데이터 스트림에 관하여 알아보자. 배압 (Backpressur

2021년 9월 15일
·
0개의 댓글
·
post-thumbnail

[RxJava] Observable 디버깅하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 이전 포스팅과 이어집니다. Observable 디버깅 연산자 데이터 스트림에서는 다양한 이벤트가 발생한다. 이러한 흐름이 어떻게 흘러가고 있는 지 손쉽게 파악할 수 있도록 다양한 연산자들을 제공해준다. doOnEach() 메소드 ![](https://images.velog.io/images/haero_kim/post/55ab114f-6c8f-4268-98ff-9b9f93c17583/%E1%84%83%E1%85%A1%E1%84%8B%

2021년 9월 15일
·
0개의 댓글
·
post-thumbnail

[Android] EditText 를 Reactive 하게!

🤚🏻 Reactive X, RxJava 등 반응형 프로그래밍에 대한 사전 지식이 필요한 포스팅입니다. 예제 코드는 모두 킹갓 언어 'Kotlin' 을 기준으로 합니다. 사용자의 입력을 받는 컴포넌트, EditText 안드로이드를 개발하는 우리는 사용자들에게 무언가를 검색하는 기능을 제공해주기 위해 EditText 라는 View 위젯을 사용한다. EditText 는 하나의 입력 상자로, 사용자가 키보드로 두드린 텍스트 입력값을 갖고 있게 된다. 따라서 보통 폼 입력 혹은 검색 기능을 위해 사용된다. 그럼 만약 검색 기능을 구현하고 싶다 할 때, 크게 두 가지 방법을 떠올릴 수 있다. >1. 검색 버튼을 통한 수동 검색 사용자가 입력한 키워드로 자동 검색 첫 번째 '검색 버튼을 통한 수동 검색' 은 흔히 볼 수 있는 구조다. 사용자가 검색어를 다 입력하고, 보통은

2021년 9월 13일
·
0개의 댓글
·
post-thumbnail

[RxJava] Observable 오류 처리하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 이전 포스팅과 이어집니다. Observable 오류 처리하기 데이터가 발행되다보면, 은연중에 오류가 발생할 수도 있는 것이다. 그런데 보통 데이터 스트림에서 오류가 발생하면, 즉시 데이터 스트림이 종료되기 때문에 따로 조치를 해주어야 하는 상황이 있을 수 있다. 이번 포스팅에선 Observable 에서 발생할 수 있는 에러를 핸들링하는 방법 몇 가지를 알아보자. onError() Consumer 등록하기 이전에 Observable 에서 에러가 발생하면 **`E

2021년 9월 9일
·
1개의 댓글
·
post-thumbnail

[RxJava] Observable 결합하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 이전 포스팅과 이어집니다. Observable 결합하기 여러 개의 Observable 데이터 스트림을 하나의 Observable 로 만들 수 있다. 여러 데이터를 이용하여 가공해서 사용하는 경우, 혹은 HTTP 통신의 응답들을 한 번에 묶어서 받고 싶은 경우 등에 사용하게 된다. 이번 포스팅에선 이러한 동작을 하는 Observable 결합 연산자들 중 몇 가지를 알아보고자 한다. 설명만 들어서는 헷갈릴 수 있는 파트다. 마블 다이어그램과

2021년 9월 8일
·
0개의 댓글
·
post-thumbnail

[RxJava] Observable 필터링하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 이전 포스팅과 이어집니다. Observable 필터링하기 필터링 연산자는 Observable 이 뱉는 데이터들을 어떤 기준에 의해 거른 후 발행하도록 한다. 이번 포스팅에선 Observable 필터링 연산자 중 자주 사용되는 몇 가지를 알아보며, 개념을 익혀보도록 하자. debounce() 메소드 이 녀석은 특정 시간동안 더 이상 데이터가 발행되지 않을 때에 데이터을 발행하는 연산자이다. ![](https://images.velog.io/im

2021년 9월 8일
·
0개의 댓글
·
post-thumbnail

[RxJava] Observable 변형하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다 공식 문서를 참고하여 작성된 포스팅입니다. 이전 포스팅과 이어집니다. Observable 변형해보기 Observable 을 변형한다 함은, 데이터를 특정 형태로 변형하여 발행하는 것이다. 어떤 비동기 기능을 개발할 때, 상황에 따라 알맞은 형태로 반환받고 싶어질 때가 있다. 이럴 때를 대비하여 이번 포스팅에서는, Observable 을 변형하는 다양한 연산자들에 대하여 알아보자. buffer() 메소드 우리는 버퍼 라

2021년 9월 5일
·
0개의 댓글
·
post-thumbnail

[RxJava] Disposable 다뤄보기

이전에 Observable 을 생성하고 구독하는 방법을 알아보았었다. 해당 내용의 연장선이니, 가물가물하다면 다시 이전 포스팅을 참고하길 바란다. subscribe() 의 비밀 내용을 상기시켜보자. 우리는 subscribe() 를 통해 Observable 데이터 스트림을 구독해볼 수 있었다. 그런데 이를 실험해본 사람이 있는지 모르겠는데. subscribe() 는 사실 Disposable 이라는 객체를 반환하기도 한다. 아래와 같이, Observable 을 subscribe() 로 구독하면, Disposable 객체를 리턴받아 할당할 수 있다. 그럼 이 녀석은 어디다 사용하는 것일까? Disposable 개념

2021년 8월 29일
·
0개의 댓글
·
post-thumbnail

[RxJava] Cold & Hot Observable

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다. 이전 포스팅 [Single, Maybe, Completable] 과 이어집니다. 이전 포스팅에서 Observable 을 생성하는 방법과 이외 특별한(?) 데이터 스트림들에 대해서도 알아보았다. 우리가 알아본 Observable 은 크게 두 가지로 나눌 수 있는데, 오늘은 이에 대해서 알아보고자 한다. Cold Observable & Hot Observable Observable 은 Cold Observable 과 Hot Observable 로 나눌 수 있는데, 차이는 요약하자면 이렇다. Cold Observable : 생성된 이후 누군가 구독을 요청했을 때 '처음부터' 데이터 발행 Hot Observable :

2021년 8월 27일
·
2개의 댓글
·
post-thumbnail

[RxJava] Single, Maybe, Completable

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다. 이전 포스팅 [Observable 생성하기] 과 이어집니다. 이번 포스팅에서는 Observable 외에, Observable 에서 조금 변형되어 특수 목적을 가지는 데이터 스트림들을 소개한다. 그 중 Single, Maybe, Completable 등을 알아보자. Single 이름에 알 수 있듯, 단 하나의 데이터만 발행하는 녀석이다. create() 를 사용할 때 Emitter 를 사용하여 데이터를 발행한다. 기존에 onNext(), onComplete() 를 사용하여 다양한 이벤트들을 처리해주곤 했는데, Single 은 어차피 단 하나의 데이터 발행만 이루어지기 때문에 **

2021년 8월 25일
·
0개의 댓글
·
post-thumbnail

[RxJava] Observable 생성하기

🔔 앞으로의 Reactive X 시리즈는 RxJava, RxKotlin 기준으로 작성됩니다. 이전 포스팅 [Observable 개념 날먹하기] 과 이어집니다. RxJava 에서는 다양한 형식으로 Observable 을 생성할 수 있다. 기존의 데이터를 Observable 형태로 만들 수도 있고, 네트워킹 작업 자체를 Observable 로 만들 수도 있다. 오늘은 Observable 을 생성하는 다양한 방법에 대해 알아보자. 사실 방법이 매우 많기 때문에, 그 중 자주 쓰이는 것들을 살펴본다. create() 메소드 Observable.create() 를 통해 Emitter 를 이용하여 직접 어떤 **데

2021년 8월 24일
·
0개의 댓글
·
post-thumbnail

[Reactive X] Observable 개념 날먹하기

Observable 녀석의 정체 Reactive X 세계에서는 어떤 데이터 흐름을 '관찰'하는 데에 포커스를 두고, 비동기적으로 다양한 동작을 수행할 수 있다. 그냥 메인 쓰레드는 자기 할 일 하고 있다가, 어떤 데이터가 나왔을 때 이를 감지하여 원하는 특정 동작을 수행할 수 있다. 이 때, 이 '관찰할 수 있는' 데이터 스트림을 Rx 에서는 Observable 이라고 부른다. 보통 Observable 은 어떠한 순차적인 데이터를 갖게 된다. 이 데이터 스트림을 관찰하게 되는 '옵저버'들은 'Observable' 이 발행하는 '데이터'에 즉각 반응을 할 수 있다. 바로 '옵저버 패턴'을 이용해서 말이다. 옵저버 패턴 되짚어보기 이전에 옵저버 패턴에 대하여 [포스팅](https://velog.io/@haero_kim/%EC%98%B5%EC%A0%80%EB%B2%84-%E

2021년 8월 22일
·
0개의 댓글
·
post-thumbnail

RxJava 가 뭐야? 새로운 언어야?

👋🏻 이 글은 Reactive X, 반응형 프로그래밍을 처음 접하는 사람들을 위한 포스팅입니다. 🤔 채용공고에 보이는 의문의 자격요건 요즘 앱 개발자 포지션의 채용공고에 보면 자격요건, 우대사항 등에 다음과 같은 말들이 자주 보인다. RxJava3 를 능숙하게 다룰줄 아는 사람 Reactive X 를 활용한 함수형 프로그래밍에 익숙한 사람 RxKotlin, RxAndroid 를 사용해본 적 있는 사람 RxSwift 를 사용하여 비동기 처리를 구현해본 사람 > 예상반응 1 : '뭐지? 업그레이드 된 자바인가?' 예상반응 2 : **'흠.. 라이브러리 이름인가? 아무튼 좋

2021년 5월 25일
·
6개의 댓글
·