JAVA: 282개의 글
참조문서 https://projectreactor.io/ https://github.com/reactor/reactor-core https://godekdls.github.io/Reactor%20Core/contents/ 리액티브 스트림을 기본적으로 이해해야, Reactor 도 수월하게 이해할 수 있다. cf) 리액티브 스트림 포스팅 : https://sjh836.tistory.com/182 예제코드는 io.projectreactor:reactor-core:3.4.2 기준으로 작성되었다. 1. Reactor의 탄생 reactor 1.0은 13년 7월에 출시되었다. spring 프레임워크의 개발팀인 pivotal 에서 만든 오픈소스이다. 리액터 패턴, 함수형 프로그래밍, 메세지 기반 등의 설계와 모범사례들..
1. RxJava는? https://github.com/ReactiveX/RxJava 리액티브 프레임워크 중 하나이다. 다른 구현체로는 Akka, 리액터 등 RxJava 1.3.8을 끝으로 EOL 되었지만, 개념을 익히는 용도로만 사용해보자 RxJava 2.x 나 3.x 사용 권장 아래에서 사용하는 API들은 매우 기본적인 거라, 다른 버전에서도 호환됨 2. 스트림의 생산과 소비 @Test public void 스트림의_생산과_소비() { // 스트림 생산 : 이벤트 생성기 Observable observable = Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber
참조문서 http://www.reactive-streams.org https://github.com/reactive-streams/reactive-streams-jvm/ https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/ 1. Reactive Streams 란? 리액티브 스트림 스펙을 정의하고, 인터페이스를 제공하는 reactive-streams.org 를 살펴보면, 다음과 같다. Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. non-blocking b..
enum 이전 포스팅 : https://sjh836.tistory.com/134 1. 이놈(Enum...)을 효율적으로 찾는 방법 장르, 카테고리, 각종 컨텐츠 타입 등 enum 의 활용은 무궁무진하다. enum 을 잘 선언했다면, enum 을 잘 찾는 것도 중요하다 예를들어 DB에 enum name 이 아닌.. 무언가 코드값만 저장하고, 꺼내쓸 때 코드를 enum 으로 바꾸는 상황을 가정해보자. 다른 예제로는 API 응답값 내 코드를 우리 서비스의 enum 으로 바꿔쳐야한다던지.. 아래에서는 enum 을 찾아내는 3가지 예제 코드들이다.@Getter @AllArgsConstructor public enum @Getter @AllArgsConstructor public enum OperatingSyste..
참조문서 : http://www.baeldung.com/jackson-annotations 1. jackson 이란? jackson은 자바진영 json 라이브러리로 잘 알려져 있지만 json 뿐만 아니라 XML, YAML, CSV 등 다양한 형식의 데이타를 지원하는 data-processing 툴이다. 스트림 방식이므로 속도가 빠르며 유연하며 다양한 third party 데이터 타입을 지원하며 annotation 방식으로 메타 데이타를 기술할 수 있으므로 JSON 의 약점중 하나인 문서화와 데이타 validation 문제를 해결할 수 있다. 2. 의존성 추가 databind 는 jackson-core, jackson-annotation 에 의존성이 있으므로 pom 파일에는 databind 모듈만 기술한다..
참조문서 https://docs.oracle.com/javase/8/docs/api/java/util/function/package-frame.html https://skyoo2003.github.io/post/2016/11/09/java8-lambda-expression https://homoefficio.github.io/2017/02/19/Java8-%EB%9E%8C%EB%8B%A4-%EA%B4%80%EB%A0%A8-%EC%8A%A4%ED%8E%99-%EC%A0%95%EB%A6%AC/ 1. 람다란? 람다란 코드블록이다. 기존에는 코드블록은 반드시 메서드 내에 존재해야 했다. 코드블록을 가지려면 메소드, 클래스를 선언해야 했다. 하지만 자바8부터는 람다를 통해 코드블록만 가질 수 있도록 한 것이다. ..
참조문서 http://www.nextree.co.kr/p6960/ http://slenderankle.tistory.com/162 1. SOLID란? 객체지향 설계는 긴 세월과 수많은 시행착오를 거치며 5가지 원칙이 정리되었다. 이것은 객체지향 설계의 5원칙이라고 하며, 앞글자를 따서 SOLID라고 한다. SPR(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 ..
1. 클래스와 객체 가장 흔한 설명중에 대표적으로 잘못된 것은 붕어빵이야기다. 클래스 = 붕어빵틀, 객체 = 붕어빵에 비유하며, 붕어빵틀에서 붕어빵을 찍어낸다는 이야기다. 하지만 코드로 보면 이 비유는 틀렸다. 클래스 객체변수명 = new 클래스(); 에 대입해보면, 붕어빵틀 붕어빵 = new 붕어빵틀(); 이다. 말이 안되는 예제이다. 여기서 붕어빵틀은 붕어빵을 만드는 Factory로 이해를 해야지, 클래스와 객체관계로 이해하면 안된다. 클래스는 추상적이고, 클래스라는 단어대로 분류에 대한 개념이지, 실체가 아니다. 하지만 객체는 실체이다. class Person이 있고, Person ljh = new Person(); 이 말이 되는 것이다. 클래스 : 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개..
참조문서 : https://d2.naver.com/helloworld/10963 관련 포스팅 : http://sjh836.tistory.com/121 1. 들어가며 1-1. 스레드의 종류 Daemon Thread 작업을 돕는 보조적인 역할을 수행하는 쓰레드 (GC 도 여기에 해당) 프로세스 종료시 데몬 쓰레드는 강제적으로 자동종료 언제든지 종료가 되어도 상관없는 작업 시에 사용 (그래서 주로 데몬쓰레드를 쓴다) Thread t = new Thread(); t.setDaemon(true); 로 설정가능 Non-Daemon Thread 실제 주 작업을 하는 스레드 프로세스 종료시 논데몬 쓰레드가 살아있는 경우 종료 불가능 (가끔 톰캣을 종료했지만 안꺼져서 kill 해야되는 이유) 매우 중요한 데이터 처리시에..
1. JDBC 란? Java Database Connectivity 의 약자이다. java에서 DB에 접속할 수 있도록 하는 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. 패키지는 java.sql와 javax.sql에 있다. 2. ODBC 와 차이 ODBC는 Open Database Connectivity 의 약자이다. ODBC는 모든 응용 프로그램(프로그래밍 언어 무관)에서 모든 데이터베이스 시스템과 통신하는 데 사용할 수있는 개방형 인터페이스이다. 즉, JDBC가 java만 지원하는 것과 다르게 ODBC는 언어와 독립적이다. 3. JDBC 아키텍처 JDBC 드라이버매니저는 DB에 맞는 드라이버를 load하여 JDBC를 초기화한다. JDBC 드라이버들은 자바 어..