프로그래밍언어(50)
-
Java - Virtual thread
오늘 알아볼 주제는 JDK 21부터 정식으로 도입된 Virtual Thread이다. 불가 얼마전까지만 해도 Webflux나 Kotlin의 Coroutine을 이용해 애플리케이션을 개발하였는데, 최근에 Virtual Thread를 도입하면서 조금더 깊은 이해를 가지고 사용하는 것이 좋다 생각하여 정리해본다. 우선 Virtual Thread를 알아보기전에 Java의 전통적인 Thread 모델에 대해 다시한번 되짚어보자. Thread란? 위 그림과 같이 우선 Thread에는 유저 레벨 쓰레드, 커널 레벨 쓰레드, 혼합형 쓰레드가 있다. 유저 레벨 쓰레드사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 레벨의 라이브러리를 통해 구현되며, 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기..
2024.11.30 -
Kotlin - 코틀린 타입 시스템(널이 될 수 있는 타입)
이번 포스팅에서는 코틀린의 타입 시스템에 대해 다루어볼 것이며, 주로 코틀린에서 Null을 다루는 방법을 주로 다루어볼 것이다. 널 가능성 널 가능성은 NPE 오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성이다. 자바 객체는 기본적으로 null을 허용하고, null로 받은 객체 이지만, 해당 객체의 모든 메서드를 호출할 수 있게 설계 되었기 때문에, 런타입에 NPE가 많이 발생한다. 하지만 코틀린은 null 문제를 런타임 시점이 아니라 컴파일 시점으로 옮김으로써, 컴파일 시점에 실행 시점에 발생할 수 있는 여러가지 문제의 가능성을 줄여준다. 널이 될 수 있는 타입 코틀린과 자바의 가장 중요한 차이는 코틀린 타입 시스템은 널이 될 수 있는 타입을 명시적으로 지원한다는 것이다. 여기서 널이 될 수..
2020.09.19 -
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