Java & Kotlin

parallelStream 안에서 다른 쓰레드 풀을 사용하는 행위

1. Stream Java8부터 제공하는 스트림(Stream)은 Iterable > Collection 인터페이스에 정의된 메서드입니다. 스트림은 List, Set과 같은 다양한 데이터 소스(List, Set을 구현하는 컬렉션 클래스들)로부터 생성되어 중간 연산을 통해 새로운 스트림을 반환하고, 최종 연산은 스트림 요소들에 대한 최종적인 작업을 수행하여 리턴하는 구조로 많이 사용됩니다. // 스트림 생성, 중간 연산, 최종 연산 Stream stream = numbers.stream(); Stream integerStream = stream.filter(number -> number % 2 == 0); List evenNumbers = integerStream.toList(); // 보통 Method..

2024.04.08 게시됨

Java & Kotlin

ThreadLocal을 사용할 때 주의할 점

이번 글에서는 Java ThreadLocal 클래스에 대해 소개합니다. ThreadLocal 클래스는 어떻게 구현되어 있는지 코드를 분석해보고, 간단한 사용법과 주의해야 할 점에 대해 정리해보겠습니다. 1. ThreadLocal? Java ThreadLocal 클래스를 확인해보면 아래와 같이 ThreadLocal에 대한 전반적인 소개로 시작합니다. 요약하면, ThreadLocal 클래스는 쓰레드 단위로 로컬 변수를 관리할 수 있는 방법을 제공하고 각 변수는 쓰레드별로 get/set 메서드로 접근할 수 있다는 것인데요. user ID, Transaction ID와 같이 쓰레드와 관련된 상태를 연관해서 저장해야 하는 상황에서 ThreadLocal 인스턴스를 사용할 수 있다고 예시를 들어주고 있습니다. 즉, ..

2023.10.22 게시됨

Java & Kotlin

[코틀린 인 액션] 6장, 코틀린 타입 시스템

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 코틀린을 사용하는 대표적인 장점 중 하나는 코틀린이 제공하는 타입 시스템 때문입니다. 널 가능성(nullability)은 NPE를 피할 수 있게 돕기 위한 코틀린 차입 시스템의 특성인데요. 이번 글에서는 코틀린에서 null을 처리하는 방법, 코틀린 원시 타입과 컬렉션, 배열에 대해 소개합니다. 설명하는 코드는 책에서 소개한 코드에 기반하여 설명을 위해 조금씩 각색 + 추가한 부분이 있을 수 있습니다. 1. 코틀린에서 null 가능성, 어떻게 다루나 코틀린에서..

2023.08.20 게시됨

Java & Kotlin

[코틀린 인 액션] 5장, 람다로 프로그래밍

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 이번 시간에는 코틀린에서 람다를 사용하는 여러 예제 코드를 살펴보려고 합니다. 사실 이번 장은 Java 8 이후의 람다에 대해 공부해보셨다면, 크게 새로운 부분은 없다고 생각합니다. 설명하는 코드는 책에서 소개한 코드에 기반하여 설명을 위해 조금씩 각색 + 추가한 부분이 있을 수 있습니다. 1. 람다식 이해하기 코틀린에서 람다식을 사용하는 방식에 대해 이해해보기 위해 책에서 소개하지 않은 코틀린 공식 문서의 코드를 소개합니다. 먼저, 위 코드는 고차 함수와 ..

2023.08.20 게시됨

Java & Kotlin

[코틀린 인 액션] 4장, 클래스, 객체, 인터페이스

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 이번 시간에는 코틀린의 클래스와 객체, 인터페이스에 대해 소개합니다. 설명하는 코드는 책에서 소개한 코드에 기반하여 설명을 위해 조금씩 각색 + 추가한 부분이 있을 수 있습니다. 1. 클래스 계층 정의 1-1. 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷한데, 인터페이스 안에는 추상 메서드뿐 아니라 자바의 Default Method 같은 구현이 있는 메서드도 정의할 수 있습니다. interface Clickable { fun click()..

2023.08.18 게시됨

Java & Kotlin

[코틀린 인 액션] 3장, 함수 정의와 호출

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 이번 글에서는 코틀린의 함수 정의와 호출에 대해 정리해보려고 합니다. 설명하는 코드는 책에서 소개한 코드에 기반하여 설명을 위해 조금씩 각색 + 추가한 부분이 있을 수 있습니다. 1. 코틀린에서 컬렉션 만들기 코틀린은 자신만의 컬렉션 기능을 제공하지 않고 자바 컬렉션과 같은 클래스를 사용하되, 자바보다 더 많은 기능을 제공합니다. val strings = listOf("a", "b", "c", "d") println(strings.last()) // d pr..

2023.08.15 게시됨

Java & Kotlin

[코틀린 인 액션] 2장, 코틀린 기초(함수와 변수, ..., 코틀린의 예외 처리)

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 지난 글 [코틀린 인 액션] 1장, 코틀린이란 무엇이며, 왜 필요한가? 에서는 코틀린의 기본적인 철학과 소스 코드 빌드 과정에 대해 간략하게 소개했습니다. 이번 시간에는 코틀린의 기초적인 내용 중에서 함수와 변수, 클래스와 프로퍼티, enum/when, while/for loop, 예외 처리에 대해서 정리해보겠습니다. 다만, 책의 뒷부분에서 각 내용에 대한 자세한 설명이 이어질 예정이라 이번 글에서는 짧은 예시 위주로 가볍게 정리하겠습니다. 설명하는 코드는 ..

2023.08.14 게시됨

Java & Kotlin

[코틀린 인 액션] 1장, 코틀린이란 무엇이며 왜 필요한가?

[코틀린 인 액션] 책을 읽으면서 이해한 내용을 정리합니다. 책의 설명을 기반으로 하되, Java와의 비교나 주관적인 생각들도 써보려고 하는데요. 코드를 작성하면서 궁금한 부분이나 다른 기본적인 내용들은 최대한 공식 문서를 참고해서 작성해보겠습니다. 이번 글은 첫 시간이니, 간단한 코틀린 코드 맛보기와 코틀린 소스 코드의 빌드 과정에 대해 살펴보겠습니다. 1. 코틀린 맛보기 책에서는 코틀린이 어떤 특징을 가지고 있는 언어인지 소개하기 위해 아래 예시 코드를 가장 먼저 설명합니다. data class Person(val name: String, val age: Int? = null) fun main(args: Array) { val persons = listOf(Person("영희"), Person("철수..

2023.08.13 게시됨

Java & Kotlin

ExecutorService? Thread Pool Size는 어떻게 정해야할까

0. 들어가면서멀티쓰레드를 사용하면 여러 작업을 동시에 처리하거나 병렬로 실행하여 시스템 자원을 효율적으로 활용할 수 있습니다. Java에서는 가장 근본적인 개념으로 Runnable 인터페이스를 구현하는 Thread 객체를 제공하는데요. 아래와 같은 코드를 보겠습니다.public class XXX { private static final int coreThreadCount = Runtime.getRuntime().availableProcessors(); static { System.out.println("coreThreadCount = " + coreThreadCount); } public static void main(String[] args) { for (int i = 0; i < 100; i++) ..

2023.08.06 게시됨

Java & Kotlin

내가 이해한 Garbage Collection

자바 개발자라면 Garbage Collection(이하 GC)에 대해 당연히 들어보고 한 번쯤은 공부해봤으리라 생각합니다. 하지만 어느 수준 이상의 메모리를 사용하는 애플리케이션 환경이 아니고서는 GC에 직접적인 관심을 가지기는 어려운 것 같은데요. 저 역시 얼마 전 회사에서 운영하고 있는 PM 서버를 VM으로 이사하면서 JVM 메모리 할당과 GC 옵션에 대해 들여다볼 기회가 있었고, 이번 기회에 GC의 동작 방식과 여러 가지 GC 방법에 대해 나름대로의 이해를 정리해보려고 합니다. 1. GC, Stop the word! GC는 JVM에서 제공하는 메모리 관리 메커니즘입니다. Heap 영역에서 더 이상 참조되지 않는 객체를 메모리에서 제거하여 앞으로 애플리케이션 동작에 있어 필요한 메모리를 확보하는 데 ..

2023.06.05 게시됨