Java 4

CompletableFuture의 구조와 동작 원리 정리

등장 배경Java 8 이전에는 Future라는 비동기 작업을 위한 클래스가 사용되었다.하지만 실제 개발에 적용해 보면 구조적인 제약이 명확하게 드러난다.결과를 얻기 위해선 항상 대기해야 한다Future#get()은 호출 스레드를 블로킹한다.따라서 여러 비동기 작업을 동시에 수행하더라도, 결국 결과를 순차적으로 기다릴 수밖에 없다.작업 완료 시점을 감지할 방법이 없다Future는 콜백을 등록하거나 완료 시점을 통지받는 기능이 없다.“끝나면 자동으로 다음 일을 실행해라” 같은 패턴이 불가능하다.여러 Future를 결합하기 어렵다Future 간의 관계를 표현할 수 없기 때문에, 두 개 이상의 작업을 병렬로 실행하고 결과를 합치는 로직을 직접 작성해야 했다.보통 ExecutorService, CountDownL..

Language/JAVA 2025.11.03

자바의 제네릭(Generic)

자바(Java)는 대표적인 정적 타입 언어로, 컴파일 타임에 데이터 타입을 엄격하게 검사하여 안정적인 프로그램 실행을 보장한다. 하지만 다양한 타입의 데이터를 처리하는 코드를 작성하다 보면, 하나의 클래스나 메서드를 여러 타입에 맞게 재사용해야 할 상황이 빈번하게 발생한다. 이럴 때 코드의 재사용성은 높이면서도 타입 안전성을 유지할 수 있는 기능이 필요하다. 바로 이 문제를 해결하기 위해 도입된 것이 제네릭(Generic)이다.제네릭은 자바 5부터 도입된 기능으로, 클래스나 메서드에서 사용할 데이터 타입을 파라미터화할 수 있게 해 준다. 이를 통해 하나의 코드 구조를 여러 타입에 대해 유연하게 활용할 수 있고, 컴파일 타임에 잘못된 타입 사용을 미리 차단할 수 있다. 덕분에 자바 개발자는 보다 안전하고 ..

Language/JAVA 2025.09.23

Java 21 Virtual Thread 알아보기

Java 21에서 도입된 Virtual Thread는 기존의 플랫폼 스레드 모델과는 근본적으로 다른 방식으로 동작하는 새로운 스레드 개념이다.기존 Thread의 구조와 문제점기존 Java 스레드는 Thread 클래스를 통해 생성되며, 각 Java 스레드는 OS 커널 스레드와 JNI(Java Native Interface)를 통해 매핑되는 1:1 모델을 기반으로 한다.스레드 실행 중 I/O 작업이나 sleep() 상태가 발생하면, 운영체제는 효율적인 자원 활용을 위해 컨텍스트 스위칭을 수행한다. 이 과정에서 현재 실행 중인 Kernel Level Thread의 작업을 일시 중단하고 다른 Thread로 전환하게 된다. 컨텍스트 스위칭은 CPU 레지스터, 스택 포인터, 명령어 포인터와 같은 실행 상태 정보를 ..

Language/JAVA 2025.04.11

자바 직렬화(Serialization)와 역직렬화(Deserialization)

자바에서 직렬화는 객체 혹은 데이터를 전송 또는 저장하기 위해 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){ ..

Language/JAVA 2024.12.19
반응형