📗Java

· 📗Java
Spring Framework 6.1 부터 JDK 21 (Virtual Thread) 와의 호환을 지원하기 시작한다고 합니다. 비슷하게 block 된 쓰레드에 대한 관리를 해주는 Webflux 가 Virtual Thread 덕분에 이젠 필요가 없어지는 걸까요? 먼저 Virtual Thread (가상 쓰레드) 가 기존의 쓰레드와 어떠한 점이 달라졌는지 먼저 살펴보고, 성능 차이를 확인해보도록 하겠습닌다.기존 자바 쓰레드 동작 원리Spring Web MVC 기준Thread t = Thread.ofPlatform() JVM 의 플랫폼 쓰레드를 생성합니다.플랫폼 쓰레드가 동작하려면 CPU 에 접근해야 합니다. 그러기 위해서는 커널 쓰레드와 매핑이 1:1 로 되어야하는데 이에 대한 중간 매개체가 JNI(Java ..
· 📗Java
정렬 알고리즘 구현을 공부하던 중, 자바의 정렬 알고리즘이 어떻게 구현되어 있는지 궁금해져서 조사해 보았습니다. 그 결과는 다음과 같습니다.원시타입: DualPivotQuickSort를 사용합니다. 이는 Quick Sort의 변형으로, 배열의 크기에 따라 다른 정렬 알고리즘과 섞어 사용됩니다. 자세한 내용은 여기 참조: Java Arrays.sort() 분석객체타입: 이전에는 MergeSort를 사용했으나 현재는 TimSort를 사용합니다. TimSort는 InsertionSort와 MergeSort의 조합입니다. Collections.sort 또한 내부적으로 Object[]로 변환하여 Arrays.sort()를 사용합니다.  TimSort 는 왜 Insertion Sort 를 썼을까?TimSort가 ..
· 📗Java
Optional 를 쓰는 이유메소드의 시그니처만 보고도 선택형 값을 기대해야하는지 판단 가능null 에 의한 null pointer exception 발생에 대한 해결책으로 등장Optional.empty()와 null의 차이Optional.empty() : Optional의 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드를 통해 생성됨. 객체 그 자체null : 참조하면 Null Pointer Exception 이 발생Optional.of() 와 Optional.ofNullable() 차이Optional.of(some) : some 이 null이라면 npe가 발생한다.Optional.ofNullable(some) : some이 null이라면 Optional 객체를 만든다.도메인 모델에 Optional를 사..
· 📗Java
참고 https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%88%84%EA%B5%AC%EB%82%98-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-Reflection-API-%EC%82%AC%EC%9A%A9%EB%B2%95#reflection_api_%EA%B8%B0%EB%B2%95 https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EB%88%84%EA%B5%AC%EB%82%98-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-Dynamic-Proxy-%EB%8B%A4%EB%A3%A8%EA%B8%B0 https://tlatmsrud.tistory.com/112 ..
· 📗Java
람다란 무엇인가?메서드로 전달할 수 있는 익명 함수를 단순화한 것익명 : 보통의 메서드와 달리 이름이 없음함수 : 메서드처럼 특정 클래스에 종속되지 않음전달 : 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있음간결성 : 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없음 함수형 인터페이스란?오직 하나의 추상 메서드를 지정하는 인터페이스람다 표현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달@FunctionalInterface 어노테이션으로 정의 가능 ❗Comparator 는 FunctionalInterface 가 맞나요?코드를 살펴보니까 추상 메소드가 하나가 아니라 두 개다!package java.util;@FunctionalInterfacepublic interface Co..
· 📗Java
함수형 프로그래밍이 주는 이점을 이해해보자 동작 파라미터화란?public void printString(String input) { System.out.println("hello " + input);} 본래 인수는 항상 객체를 받는다. 위의 예시에서는 String input 객체가 해당된다. 우리는 함수형 프로그래밍을 위해 동작 (함수) 를 전달하는 방법을 몰색한다. 그 방법은 간단하게 보면 다음과 같다. Thread 인스턴스 생성을 예시로 보자. Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("run!"); }});우리는 run() 이라는 동작 (함수) 를 전달하고 싶다. 그러나 인..
· 📗Java
New/Young Generation : minor GC Old Generation : major GC, Stop-the-world (GC 쓰레드를 제외한 모든 쓰레드가 stop) Permanent Generation : Method Area ( Major GC 에 포함되는 영역) Young 영역 객체가 제일 먼저 생성되는 영역이다. Young 영역은 3개의 영역으로 나뉜다. Eden 영역 Survivor 0, Survivor 1 영역 (두 영역 중에 하나는 반드시 비어있는 상태. 그것이 아니라면 비정상적인 상황) 왜 Survivor 영역은 2개일까? 메모리 (외부) 단편화 문제를 해결하기 위함이다. 메모리 할당-해제 과정에서 생기는 메포리 파편화를 해결하기 위해 다른 Survivor 영역으로 옮길 때 ..
· 📗Java
Hello.java 가 어떻게 운영체제 위에 올라가서 작동하는지 보여주는 그림이다.javac 컴파일러가 .class 파일을 만들어준다. Java Byte Code 클래스이고 이것이 jvm 위에서 올라가는 것이다.어떠한 운영체제이냐에 따라 jvm 이 존재한다. 돌리고자하는 운영체제의 jvm에서 .class 파일을 Execution Engine를 통해 해석하고 실행시킨다.JVM 구성이전에는 전체적인 흐름을 보았고 이젠 jvm 에서 어떻게 실행되는지 보도록 하자.Class Loader (클래스 로더)자바는 기본적으로 컴파일 타임이 아니라 런타임에 참조한다. 그래서 처음 클래스를 참조할 때 해당 클래스를 로드하고 링크하는 과정이 필요하다. Loading : 흩어져있는 .class 확장자를 가진 클래스 파일들을 ..
· 📗Java
운영체제에서 배우는 Thread의 개념을 숙지하고 자바에서는 어떻게 구현되는지 알아봅시다! Thread 구현 Thread 클래스 상속 Runnable 인터페이스 구현 Thread 클래스 상속의 경우 run() 메소드를 오버라이딩하고 Runnable 인터페이스 구현의 경우 run() abastract 메소드를 구현해주는 방식이다. 이전에 배웠겠지만 클래스 상속보다는 인터페이스 구현이 좀 더 선호된다. (자바는 단일 상속만 가능하기 때문) 다만 Runnable 자체로는 start() 메소드를 호출할 수 없다. (start 와 run의 차이는 다음에!) 따라서 Runnable 인터페이스 구현체를 Thread 생성자에 넣어 새로운 쓰레드로 생성해주고 사용하도록 한다. public class ThreadTest ..
· 📗Java
String 클래스는 char[] 배열을 인스턴스 변수로 갖는 클래스이다. String 클래스 특징, 메소드 그리고 관련 클래스인 StringBuffer 와 StringBuilder 에 대해 알아보도록 하자. String 은 변경 불가능한 클래스이다. (Immutable Class) String a = "a"; String b = "b"; a = a + b; // "ab" 예시를 보면 a 클래스의 문자열이 "a" 에서 "ab" 로 바뀌었다. 변경 불가능한 클래스인 String 이 어떻게 값을 바꾸었을까? 결론부터 말하면 값을 바꾸진 못한다. a, b 모두 클래스이기 때문에 변수 자체에는 주소값이 저장되어 있다. 해당 주소값에 가보면 문자열 데이터가 저장되어 있다. a = a+b 에서 두 가지 일이 벌어진..
kkyu0718
'📗Java' 카테고리의 글 목록