Scheduler (스케줄러) RxJava 는 다양한 문제를 해결할 수 있는 범용적인 솔루션이다. 특히 멀티 쓰레딩과 같은 비동기 작업을 효율적으로 구현할 수 있는 환경을 제공해준다. 이는 스케줄러라는 녀석을 활용하게 된다. 스케줄러는 데이터 스트림이 어떤 쓰레드에서 데이터를 발행하는지, 구독자는 어떤 쓰레드에서 이벤트 발생을 통보받는지에 대해 지정해줄 수 있다. RxJava 에서는 Schedulers 클래스에서 제공하는 정적 패토리 메소드를 통해 스케줄러를 설정해줄 수 있다. Scheduler 종류 >### Single 스케줄러 Single 스케줄러는 단일 쓰레드를 생성하여 이를 계속 재사용하는 방식을 활용한다. RxJava 내부에서 쓰레드를 별도로 생성하여, 한 번 생성된 쓰레드를 활용하며 여러 작업을 처리하게 된다. >### IO 스케줄러 이 녀석은 네트워킹 작업이나 **DB 트랜잭션, 파일 시스
Thread Pool 이 등장하게 된 이유 우리는 프로그램을 개발할 때 다양한 이유로 쓰레드를 생성하곤 한다. 그것은 비동기 처리의 일환일 수도 있고, 연산 효율을 높이기 위함일 수도 있다. 그러나 쓰레드를 계속하여 생성하고 회수하는 것은, 시스템적으로 오버헤드가 상당히 큰 작업이다. 쓰레드를 한 번 생성할 때마다 OS 가 해당 쓰레드를 위한 메모리 영역 (스택 등) 을 확보해주고, 쓰레드가 더이상 필요 없을 땐 다시 이 메모리 영역을 회수하는 작업이 일어난다. 이는 상당히 비용이 큰 작업이기 때문에, 쓰레드를 계속하여 생성하고 수거했다간 프로그램의 퍼포먼스에 분명히 영향을 끼치게 되어있다. 그렇다고 '음.. 걍 쓰레드 많이 만들지 마세요 ㅋㅋ' 할 순 없는 노릇이다. 그래서 등장하게 된 아이디어는 '여러 쓰레드를 미리 만들어두고 작업이 들어올 때마다 쓰레드들에게 작업을 적절히 분배해주자'는 것이다.
%20(1).jpg) JVM 개요 누구나 JVM 이라는 용어를 한 번쯤 들어봤을 것이고, 전공 과목으로 자바를 배웠다면 더욱이 친숙할 단어이다. 얼핏 기억나는 사람들은 어림짐작 가능할 것이다. JVM 의 핵심 역할은 다음과 같다. - JVM 기반 프로그램이 플랫폼, 운영체제에 국한되지 않고 실행될 수 있도록 해줌 - JVM 기반 프로그램의 메모리를 관리하고 최적화해줌 >JVM 은 코드를 실행하고, 해당 코드에 대한 런타임 환경을 제공하는 프로그램에 대한 사양 한 줄로 정리하자면, JVM 은 자바 기반 애플리케이션을 클래스 로더를 통해 읽어들이고, 자바 API 와 함께 실행하는 역할을 한다. Java 프로그램과
C/C++ 프로그래밍을 해본 사람들이라면 알테지만, 객체를 생성한 이후 더이상 사용하지 않는 객체에 대해서는 free() 등을 활용해 메모리를 꼭 해제해줘야 했다. 만약 메모리를 해제하지 않는다면 메모리 릭이 발생하고 말 것이기 때문이다. 그러나 자바에서는 JVM 이 구성된 JRE (Java Runtime Environment) 가 제공되고, JRE 의 구성 요소 중 하나인 Garbage Collection (이하 GC) 가 위 과정을 알아서 해준다. 매우 편리한 것이다. GC 에 대해 살펴보기 전에, stop-the-world 라는 용어를 알아둬야 한다. stop-the-world 란? GC 를 실행하기 위해 JVM 애플리케이션 실행을 멈추는 것이다. stop-the-world 가 발생하면 GC 를 실행하는 쓰레드를 제외한 나머지 모든 쓰레드가 작업을 멈춘다. GC 작업이 완료되면, 중단됐던 작업이 재개된다. 어떤 GC 알
자바와 다르게, 코틀린은 다양한 Class 를 제공해준다. 그 중 하나로 Data Class 라는 것이 있는데, 이는 자바 개발자들의 고충과 니즈를 정확히 파악한 기능을 갖고 있다. 정말 감동적이지 아니할 수 없다! 이번 포스팅에선, Data Class (데이터 클래스) 가 우리에게 선사하는 감동을 느껴보자! Data Class (데이터 클래스) 개념 일반 클래스와 달리, 다양한 메소드를 자동으로 생성해주는 클래스이다. 만약 자동으로 생성되는 메소드들이 별로 필요하지 않는 녀석들이었다면, 개발자들 사이에서 쓰이지도 않았을 터이다. 하지만 매우 폭발적인 편리함을 제공하는 유용한 메소드들이 자동 생성된다. Data Class 생성 시 같이 만들어지는 녀석들 hashCode() copy() equals() toString() componentsN() 또한 아래와 같은 여러 가지 다양한 특
디자인 패턴 시리즈의 2번째 포스팅이다! (이전 포스팅 - 옵저버 패턴 개념 보러가기) 이번 포스팅에선 사람들에게 가장 많이 알려진 디자인 패턴 중 하나인 싱글톤 패턴의 개념에 대하여 쉽게 알아보고자 한다. 다른 패턴들과 마찬가지로, 어렵게 생각할 것 없으니 천천히 살펴보도록 하자. 1. 싱글톤 패턴이 뭐야? 🤔 싱글톤이 뭔지는 몰라도, 우선 '싱글'하면 떠오르는 갖가지 개념들