본문 바로가기

자바

(12)
웹플럭스에서 블록킹 연산의 영향은? 해결 방법? 웹플럭스에서 블록킹 연산을 발생시키는 채널이 있다면, 이벤트 채널을 관리하는 이벤트 루프 자체에 블럭킹이 발생하기 때문에 전체적으로 요청 처리를 하나도 못하는 문제가 발생할 수 있다. 그렇기 때문에 블럭킹을 발생시키는 연산이 있을 경우 스케쥴을 분리시켜주는 것이 좋고, 실제로 리액터에서도 이러한 것을 고려해 스케쥴러 생성 팩토리 메서드를 제공한다. 위 두개의 팩토리 메서드는 non-blocking 연산을 위한 스케쥴러 팩토리 메서드이다. 오래 걸리는 연산 등을 이벤트 루프 쓰레드에서 분리하고 싶을 때 사용하며, 블럭킹 연산이 포함되지 않은 연산에서만 사용해야한다. 만약 블록킹 연산에 대해 스케쥴을 분리하고 싶다면 boundedElastic()을 이용하면 된다. 사용법은 아래와 같다. 그런데, 블록킹 연산..
Kotlin - 코틀린의 클래스, 객체, 인터페이스 이전까지 간단하게 코틀린에 대한 간략한 문법들을 다루어봤는데, 이번 포스팅은 코틀린의 클래스, 객체, 인터페이스에 대해 다루어본다. 인터페이스 자바의 인터페이스와 크게 다르지 않다. interface SampleInterface1 { val property: String fun method1() fun method3() = println("method2") } interface SampleInterface2 { fun method2() fun method3() = println("method2") } class SampleImpl(): SampleInterface1, SampleInterface2 { override val property: String get() = TODO("Not yet implem..
Kotlin - 함수 정의와 호출 오늘은 코틀린의 함수 정의와 호출에 대해 다루어 본다. 컬렉션 객체 만들기 fun createHashSet() = hashSetOf(1, 7, 53) fun createArrayList() = arrayListOf(1, 7, 53) fun createHashMap() = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 기본적으로 코틀린은 컬렉션을 만드는 함수를 기본 라이브러리에 내장이 되어 있다. 또한 마지막에 hashMap을 만드는 함수 안에 "to"라는 키워드가 있는데, 사실 키워드가 아니고 일반 함수이다. 이점은 뒤에서 자세히 설명한다. 또한 생성하는 컬렉션 객체는 코틀린만의 컬렉션 객체가 아니고, 자바의 컬렉션 객체를 생성한다. 하지만 자바에서..
Kotlin - 코틀린 간단한 문법 예제(함수, 변수, 클래스, for문, 예외처리, map iterator, 스마트 캐스팅..) 오늘은 코틀린에 대해 아주 기초를 다루어본다. 함수(Function) 코틀린에서 함수는 "fun"이라는 키워드로 정의한다. 간단하게 리턴값이 있고, 없는 함수와 바디 내용이 식으로만 이루어졌을때 함수를 간략화 하는 방법은 아래와 같다. /** * 리턴이 없는 함수 */ fun helloWorld() { println("hello, world") } /** * 리턴값이 있는 함수 */ fun max(a: Int, b: Int): Int { //코틀린의 if문은 식(리턴 값이 존재)이지 문(block, return이 없음)이 아니다. return if (a > b) a else b } /** * max 함수와 간략 버전 * 함수의 본문이 식으로만 이루어져있다면, 아래처럼 간략하게 바꿀 수 있다. * 또한 반..
Java - 자바 날짜&시간 java.time 패키지(LocalDateTime, ZoneDateTime) 오늘 다루어볼 내용은 jdk1.8의 날짜&시간을 다루는 java.time 패키지를 다루어볼 것이다. 바로 java.time 패키지 내용을 다루기 전에 우선 프로그래밍에서의 날짜와 시간에 대해 표준인 ISO-8601에 대해 먼저 알아본다. ISO-8601 ISO 8601 Data elements and interchange formats - Information interchange - Representation of dates and times은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 이 표준은 국제 표준화 기구(ISO)에 의해 공포되었으며 1988년에 처음으로 공개되었다. 이 표준의 목적은 날짜와 시간을 표현함에 있어 명백하고 잘 정의된 방법을 제공함으로써, 날짜와 시간의 숫자 표현..
Java - Reactor switchIfEmpty 사용시 주의점(Lambda, 람다 Lazy Evaluation) 리액터의 switchIfEmpty라는 메서드를 다루기 전에 자바의 Lazy evaluation(지연 평가)에 대해 다루어보자. 자바는 논리 operation을 평가할때 lazy evaluation을 사용한다. 예제 코드를 예로 들면 아래와 같다. @Test void lazyEvaluationTest() { boolean isLazy = lazyEvaluation(); if (true || isLazy) { System.out.println("method execute!!!"); } } private boolean lazyEvaluation() { System.out.println("lazy evaluation"); return true; } 위 테스트에서 결과는 어떻게 될 것인가? lazy evaluat..
Java - jdk 14 record(레코드) 란?! Data class(데이터 클래스) 오늘 다루어볼 내용은 java 14에서 도입된 record 타입의 클래스입니다. record란? 레코드(record)란 "데이터 클래스"이며 순수하게 데이터를 보유하기 위한 특수한 종류의 클래스이다. 코틀린의 데이터 클래스와 비슷한 느낌이라고 보면 된다. 밑에서 코드를 보겠지만, record 클래스를 정의할때, 그 모양은 정말 데이터의 유형만 딱 나타내는 듯한 느낌이다. 훨씬더 간결하고 가볍기 때문에 Entity 혹은 DTO 클래스를 생성할때 사용되면 굉장히 좋을 듯하다. sample code 간단하게 샘플코드를 살펴보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class SampleRecord { private final ..
Java - 중첩이 많은 Stream 처리 Tip ! 오늘 다루어볼 내용은 자바에서 Stream(java 8 stream, reactor ...)을 사용할때 유용한 팁이다. 많은 사람들이 아는 해결법일 수도 있고, 혹은 필자와 같은 스타일을 선호하지 않는 사람들도 있을 것이다. 하지만 필자가 개발할때 이러한 상황에서 조금 유용했던 Stream pipeline Tip을 간단히 소개한다. 중첩이 많고, 이전 스트림보다 더 이전의 스트림의 결과 값을 사용해야 할때 상황은 아래와 같은데, 간단히 바로 이전 스트림의 결과가 아닌, 더 전의 스트림 원자를 로직에서 사용하려면 대게 아래와 같이 스트림 파이프 라인을 이어나간다. Mono.just("id") .flatMap(id -> return Mono.just(service.getById(id)) .map(entity..