java(22)
-
Java - Virtual thread
오늘 알아볼 주제는 JDK 21부터 정식으로 도입된 Virtual Thread이다. 불가 얼마전까지만 해도 Webflux나 Kotlin의 Coroutine을 이용해 애플리케이션을 개발하였는데, 최근에 Virtual Thread를 도입하면서 조금더 깊은 이해를 가지고 사용하는 것이 좋다 생각하여 정리해본다. 우선 Virtual Thread를 알아보기전에 Java의 전통적인 Thread 모델에 대해 다시한번 되짚어보자. Thread란? 위 그림과 같이 우선 Thread에는 유저 레벨 쓰레드, 커널 레벨 쓰레드, 혼합형 쓰레드가 있다. 유저 레벨 쓰레드사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 레벨의 라이브러리를 통해 구현되며, 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기..
2024.11.30 -
Kotlin - with와 apply란? (수신 객체 지정 람다)
오늘 다루어볼 내용은 코틀린의 with와 apply 함수이다. 바로 예제로 들어간다. with 함수 fun alphabet(): String { val result = StringBuilder() for (letter in 'A'..'Z') { result.append(letter) } result.append("\nNow I Know the alphabet!") return result.toString() } 위 코드는 알파벳을 출력해주는 함수이다. 뭔가 StringBuilder를 생성하여 특정 변수에 담고, 해당 변수를 사용해 함수를 호출하고 뭔가 군더더기가 많이 붙어있는 느낌이다. 해당 코드를 with 함수를 통해 리팩토링이 가능하다. fun alphabet() = with(StringBuilder..
2020.09.19 -
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..
2020.09.17 -
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"라는 키워드가 있는데, 사실 키워드가 아니고 일반 함수이다. 이점은 뒤에서 자세히 설명한다. 또한 생성하는 컬렉션 객체는 코틀린만의 컬렉션 객체가 아니고, 자바의 컬렉션 객체를 생성한다. 하지만 자바에서..
2020.09.16 -
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 함수와 간략 버전 * 함수의 본문이 식으로만 이루어져있다면, 아래처럼 간략하게 바꿀 수 있다. * 또한 반..
2020.09.15 -
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..
2020.07.29