- [ Language/JAVA ]Java 21 Virtual Thread 알아보기2025-04-11 14:23:44Java 21에서 도입된 Virtual Thread는 기존의 플랫폼 스레드 모델과는 근본적으로 다른 방식으로 동작하는 새로운 스레드 개념이다.기존 Thread의 구조와 문제점기존 Java 스레드는 Thread 클래스를 통해 생성되며, 각 Java 스레드는 OS 커널 스레드와 JNI(Java Native Interface)를 통해 매핑되는 1:1 모델을 기반으로 한다.스레드 실행 중 I/O 작업이나 sleep() 상태가 발생하면, 운영체제는 효율적인 자원 활용을 위해 컨텍스트 스위칭을 수행한다. 이 과정에서 현재 실행 중인 Kernel Level Thread의 작업을 일시 중단하고 다른 Thread로 전환하게 된다. 컨텍스트 스위칭은 CPU 레지스터, 스택 포인터, 명령어 포인터와 같은 실행 상태 정보를 ..
- [ Language/JAVA ]Java 패턴 매칭(Pattern Matching)2025-03-25 15:40:231. Java의 Pattern Matching이란?Pattern Matching은 Java에서 보다 간결하고 읽기 쉬운 코드를 작성하기 위해 도입된 기능이다.이는 조건 검사를 더 효율적으로 수행하고, 복잡한 객체의 타입을 식별하여 각 상황에 맞는 동작을 실행할 수 있도록 돕는다.주요 예제로는 switch 문과 instanceof 연산자를 활용한 Pattern Matching이 있다. 이 기능은 조건문에서 불필요한 반복 코드를 제거하고 코드의 가독성을 높인다.2. Pattern Matching의 특징기존의 Java 코드에서는 타입 확인 후 명시적으로 타입 변환(casting)을 수행해야 했다. Pattern Matching은 이러한 과정을 자동화하여 코드량을 줄이고, 가독성을 높여 준다. 그리고 Patte..
- [ Language/JAVA ]Java 16 Record class2025-03-24 15:41:261. record 키워드란?Java 16에서 도입된 record는 불변 객체를 생성하기 위한 특별한 클래스 유형이다.쉽게 말해, record를 사용하면 모든 필드가 자동으로 final로 선언되며, 객체의 상태를 변경할 수 없게 된다. 이는 데이터 전송 객체(DTO; Data Transfer Object)나 간단한 데이터 구조를 만들 때 매우 유용하다. record는 기본적으로 데이터의 저장과 접근을 간편하게 해주는 메서드를 자동으로 생성해 주기 때문에, 개발자는 반복적인 코드 작성을 줄일 수 있다.예를 들어, 일반적인 Java 클래스에서는 필드를 정의하고, 생성자, 접근자(getter) 메서드, toString(), equals(), hashCode() 메서드를 수동으로 작성해야 했다. 하지만 recor..
- [ Language/JAVA ]Java 17 sealed class (sealed - permit 예약어)2025-03-24 14:30:231. sealed 키워드란Java 17에서 sealed - permits 예약어가 추가되었다. sealed는 봉인된이라는 뜻으로, 기존에 상속을 완전히 차단하는 final과는 다르게, 일부 하위 클래스에 한하여 상속을 허용하는 기능을 제공한다. 이를 통해 상속 계층을 명확하게 정의하고 불필요한 확장을 방지하여 더 안전한 코드 설계를 가능하게 한다.하지만 sealed 키워드는 유연성을 일부 희생해야 하는 단점도 존재한다. 새로운 하위 클래스를 추가하려면 원본 클래스를 수정해야 하므로 유지보수가 번거로울 수 있으며, permits 목록이 길어질 경우 관리가 어려워질 수 있다.2. sealed 키워드의 특징sealed 예약어는 클래스(class)뿐만 아니라 인터페이스(interface)에도 사용할 수 있다. ..
- [ Language/JAVA ]자바 직렬화(Serialization)와 역직렬화(Deserialization)2024-12-19 14:29:51자바에서 직렬화는 객체 혹은 데이터를 전송 또는 저장하기 위해 Byte Array로 변환하는 과정을 말한다. 역직렬화는 반대로 변환된 Byte Array를 객체 혹은 데이터로 변환하는 과정이다.직렬화(Serialization)직렬화 방법은 아래와 같다.public static byte[] serialize(Object obj){ try(ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos)){ oos.writeObject(obj); return baos.toByteArray(); }catch(IOException e){ ..