거꾸로 바라본 세상
article thumbnail
[Reactive Programming] RxJava 비동기 처리
Language/Java 2023. 4. 26. 09:10

비동기 처리 비동기 처리는 어던 작업을 실행하는 동안 해당 처리가 끝나기를 기다리지 않고 다른 작업을 수행할 수 있는 것을 말한다. RxJava는 비동기 처리를 수행하는데 필요한 API를 제공하고 기존에 구축한 비지니스 로직에 영향을 주지 않고 생산자 또는 소비자의 작업을 비동기로 처리하도록 교체할 수 있다. 또한, 용도별로 적절하게 스레드를 관리하는 클래스를 제공하여 직접 스레드를 관리하는 번거로움이 줄었다. RxJava 비동기 처리 RxJava에서 개발자가 직접 비동기 처리를 하도록 설정하거나 연산자 내에서 시간을 다루는 작업을 하지 않는 한, 생산자의 처리 작업을 실행하는 스레드에서 각 연산자의 처리 작업과 소비자의 처리 작업이 실행된다. 개발자가 직접 비동기 처리를 하도록 설정하면 생산자와 연산자..

article thumbnail
[Reactive Programming] Marble Diagram(마블 다이어그램)
Language/Java 2023. 4. 26. 09:05

Marble Diagram(마블 다이어그램) ReactiveX의 문서를 읽다보면 원형 또는 사각형 등의 도형과 화살표가 들어간 그림을 말한다. 주로 Flowable/Observable에서 메서드를 호출할 때 시간경과에 따른 데이터가 어떻게 전달되고 변화되는지를 표현한다. [Filter Diagram] filter 메서드는 원본 데이터 중 지정한 조건에 맞는 데이터만 통지하는 메서드로 Flowable과 Observable에 있는 메서드로 둘 다 같은 처리를 수행한다. filter 메서드에서 인자를 받아 데이터를 받을건지 제외할 것인지 판단하는 함수형 인터페이스를 사용하여 결과가 true 인 데이터만 통지를 한다. [에러가 발생할 경우] 처리가 정상적으로 끝나지 못하고 중간에 에러를 통지하게 되면 해당 위치..

article thumbnail
[Reactive Programming] Reactive Streams
Language/Java 2023. 4. 26. 08:57

Reactive Streams 라이브러리나 프레임워크에 상관없이 데이터 스트림을 비동기로 다룰 수 있는 공통 메커니즘으로 인터페이스만 제공하고 구현은 각 라이브러리와 프레임워크에서 한다. 구성 데이터를 통지하는 Publisher(생산자)와 데이터를 받아 처리하는 Subscriber(소비자)로 구성된다. Subscriber가 Publisher를 구독(Subscribe)하면 Publisher가 통지한 데이터를 Subscriber가 받을 수 있다. Publisher : 데이터를 통지하는 생산자 Subscriber : 데이터를 받아 처리하는 소비자 Subscriber가 구독하고 Publisher가데이터를 통지하고 Subscriber가 데이터를 받을 때까지 처리과정의 흐름이다. Subscriber는 Publish..

article thumbnail
[Reactive Programming] RxJava 개념
Language/Java 2023. 4. 26. 08:50

RxJava 개념 RxJava는 Reactive Progrmming을 구현하는데 사용하는 라이브러리 이다. 에릭 마이어가 개발한 .NET 프레임워크의 실험적 라이브러리인 Reactive Extensions(Rx) 를 2009년 마이크로소프트에서 공개하고 2013년 넷플릭스에서 자바로 이식한 것이 RxJava의 시작이다. 현재 Reactive Extensions를 다루는 라이브러리는 ReactiveX라는 오픈 소스 프로젝트로 바뀌어 자바와 .NET 뿐만 아니라 자바스크립트, 스위프트, 등 여러 프로그램언어를 지원하는 라이브러리를 제공한다. Reactive Extensions는 동기식 또는 비동기식 스트림과 관계 없이 명령형 언어를 이용해 데이터 스트림을 조작할 수 있는 일련의 도구이다. ReactiveX는..

[Reactive Programming] Reactive System(리액티브 시스템)
Language/Java 2023. 4. 26. 08:45

Reactive System(리액티브 시스템) 응답이 잘 되고, 탄력적이며 유연하고 메시지 기반으로 동작하는 시스템을 말한다. 리액티브 시스템으로 구축된 시스템은 보다 유연하고, 느슨한 결합을 갖고, 확장성이 있다. 이로 인해 개발이 더 쉬워지고 변경 사항을 적용하기 쉬워집니다. 이 시스템은 장애 에 대해 더 강한 내성을 지니며, 비록 장애가 발생 하더라도 재난이 일어나기 보다는 간결한 방식으로 문제를 해결한다. 리액티브 시스템은 높은 응답성을 가지며 사용자 에게 효과적인 상호적 피드백을 제공한다. [리액티브 시스템] 4가지 핵심 응답성(Responsive) : 시스템이 가능한 한 즉각적으로 응답하는 것을 말한다. 응답성은 사용자의 편의성과 유용성의 기초가 되지만, 그것뿐만 아니라 문제를 신속하게 탐지하..

[Java] Lamda Expressions(람다식)
Language/Java 2023. 4. 20. 09:33

[Java] Lamda Expressions(람다식) 람다식은 Anonymous Founction(익명 함수)를 생성하기 위한 식으로 함수형 인터페이스를 구현하기 위해 자바 8에서 도입한 표현식이다. 장점 자바 코드가 간결해진다. 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 람다식의 형태 람다식의 형태는 매개변수를 가진 코드블록이지만 런타임 시에는 익명 구현 객체를 생성한다. 람다식 -> 매개변수를 가진 코드 블록 -> 익명 구현 객체 public interface func { U apply(T data); } 익명 클래스 문법 new 인터페이스 이름() { 반환타입 메서드명 (인자) { 실행문 } }; 람다식과 익명 클래스의 차이점 람다식과 익명클래스의 차이점은 람다식에서..

[Java] Generic(제네릭)
Language/Java 2023. 4. 20. 09:33

[Java] Generic(제네릭) Generic(제네릭)은 class와 interface, method를 정의할 때 Type(타입)을 Parameter(파라미터)로 사용할 수 있도록 하는 역할을 한다. 그래서 타입 파라미터는 코드를 작성할 때 구체적일 타입으로 대체되어 다양한 코드를 생성할 수 있도록 한다. 장점 컴파일 시 정확한 타입 체크를 할 수 있다. 컴파일러에서 코드에서 잘못 사용한 타입 때문에 에러가 발생하는 상황을 예방할 수 있다. Casting(형변환)을 사용하지 않는다. Casting을 사용하면 불필요한 타입 변환을 하므로 성능에 영향을 줄 수 있다. List list = new ArrayList(); list.add("work"); String data = (String) list.ge..

[ES6] Symbol
Language/Javascript 2023. 4. 20. 09:22

symbol 변경 불가능한 원시타입의 값이다. 주로 변수명이 충돌 위험이 없는 유일한 객체의 Property Key를 만들기 위해 사용되며 Symbol 함수를 호출하여 생성한다. //symbol key는 이름 충돌 위험이 없는 유일한 객체의 property key 이다. let key = Symbol('key'); console.log(key); console.log(typeof key); //symbol var obj = {}; obj[key] = 'value'; console.log(obj[key]); //value [결과] Symbol(key) symbol value

템플릿 리터럴(Template Literals)
Language/Javascript 2023. 4. 20. 09:17

템플릿 리터럴(Template Literals) ES6는 템플릿 리터럴(Template Literals)은 일반 문자열과 비슷해보이지만 ' 또는 " 같은 통상적인 따옴표 문자 대신 백틱(Backtick) (`) 문자를 사용한다. const template = `템플릿 리터럴은 '작은따옴표(single quotes)'과 "큰따옴표(double quotes)"를 혼용할 수 있다.`; console.log(template); 방법1 일반적인 문자열에서 줄바꿈은 허용되지 않고 공백(white-spce)를 표현하기 위해 백슬래시(\)로 시작하는 이스케이프 시퀀스(Escape Sequence)를 사용해야한다. 템플릿 리터럴은 일반적인 문자열과 다르게 여러 줄에 걸쳐 문자열을 작성할 수 있으며 템플릿 리터럴 내의 모..

[ES6] Class(클래스)
Language/Javascript 2023. 4. 20. 09:16

[ES6] Class(클래스) 클래스는 프로토타입 기반 객체 지향 패턴을 더 쉽게 사용할 수 있게 할 수 있는 대체제로 클래스 패턴 생성을 더 쉽고 간단하게 생성할 수 있다. //클래스 선언 class Person { //constructor 생성자 constructor(name) { this._name = name; } Hello() { console.log('Hello! ' + this._name); } } const me = new Person("Paik"); const friends = new Person("Lee"); me.Hello(); friends.Hello(); 인스턴스 생성 new 연산자를 이용하여 클래스 인스턴트를 생성한다. class Foo {} const foo = new Foo(..