JAVA 14

Java Map(맵)

자바에서 Map(맵)이란? Map은 키-값(Key-Value) 쌍을 저장하는 데이터 구조자바에서 Map은 Collection 인터페이스의 일부가 아니라 별도로 존재하는 인터페이스중복된 키를 허용하지 않고 각 키는 하나의 값만을 가질 수 있다.주요 Map 구현 클래스1️⃣ HashMap 가장 많이 사용되는 Map 구현체키(Key) 값으로 hashCode()를 사용하여 저장하므로 빠른 검색 속도를 가짐순서를 보장하지 않는다.null 키와 null 값을 허용더보기import java.util.HashMap;import java.util.Map;public class HashMapExample { public static void main(String[] args) { Map map = new..

JAVA 2025.03.12

가상 쓰레드 (Virtual Threads)

1️⃣ 가상 쓰레드란? Java 19에서 도입되고, Java 21에서 정식 기능으로 추가된 새로운 경량 쓰레드기존의 플랫폼 쓰레드보다 훨씬 가볍고, 대량의 동시성을 처리할 수 있다.OS 쓰레드(플랫폼 쓰레드)를 직접 사용하지 않고, JVM이 관리하는 가벼운 쓰레드1.가상 쓰레드의 주요 특징OS 쓰레드와 1:1 매핑되지 않는다 → 기존의 Thread와 다르게 OS 쓰레드를 직접 점유하지 않는다.수백만 개의 가상 쓰레드 생성 가능 → OS 리소스를 거의 사용하지 않기 때문에 대량의 동시 작업을 실행할 수 있다.논블로킹 I/O와 궁합이 좋다 → 네트워크 요청, DB 쿼리, 파일 입출력 등에서 높은 효율성을 보인다.컨텍스트 스위칭 비용이 거의 없 → OS 쓰레드 변경이 필요하지 않기 때문에 성능이 향상.기존의 ..

JAVA 2025.03.12

CompletableFuture (비동기 처리)

1️⃣ CompletableFuture란?비동기 작업(Async Task)을 쉽게 관리할 수 있는 클래스콜백(Callback) 기반으로 동작하며, 작업 완료 후 후속 처리를 간편하게 정의 가능Future의 단점을 해결하여, 결과를 기다리지 않고도 다음 작업을 수행할 수 있다. 2️⃣ Future vs CompletableFuture 차이기존 Future의 문제점기존 Future 객체는 비동기 작업을 실행할 수 있지만 제한점이 많음더보기import java.util.concurrent.*;public class FutureExample { public static void main(String[] args) throws ExecutionException, InterruptedException { ..

JAVA 2025.03.12

Executor 프레임워크

1️⃣ Executor 프레임워크란?기존에는 new Thread()로 직접 쓰레드를 만들었지만, ➡ 쓰레드 생성 비용이 크고, 너무 많은 쓰레드가 생성되면 시스템이 느려질 수 있다✅ 이를 해결하기 위해 Executor 프레임워크를 사용하면 쓰레드를 효율적으로 관리할 수 있 2️⃣ Executor 프레임워크의 주요 개념Executor 종류설명newFixedThreadPool(n)고정된 개수의 쓰레드를 유지 (CPU 코어 수에 맞춰 조정 가능)newCachedThreadPool()필요할 때 새로운 쓰레드를 생성하지만, 기존 쓰레드 재사용newSingleThreadExecutor()하나의 쓰레드만 실행 (직렬 실행)newScheduledThreadPool(n)일정 시간마다 작업 실행 (타이머 기능)Execut..

JAVA 2025.03.12

쓰레드 동기화 (Synchronization)

1. 동기화가 필요한 이유 (Race Condition)멀티 쓰레드 환경에서 여러 개의 쓰레드가 동시에 같은 변수나 데이터에 접근하면 값이 꼬이는 문제가 발생할 수 있다.  동기화가 없는 경우 (문제 발생) 더보기class Counter { private int count = 0; public void increment() { count++; // 여러 쓰레드가 동시에 접근하면 값이 꼬일 가능성이 있음 } public int getCount() { return count; }}public class RaceConditionExample { public static void main(String[] args) { Counter count..

JAVA 2025.03.11

쓰레드(Thread)

기본적인 쓰레드 생성 및 실행쓰레드는 프로그램이 동시에 여러 작업을 수행할 수 있도록 해줍니다.우선, 싱글 쓰레드와 멀티 쓰레드의 차이를 알아보기 위해 간단한 실습을 해볼게요. 실습 1: 싱글 쓰레드 vs 멀티 쓰레드 비교🔹 아래 코드를 실행한 후 결과를 비교해 보세요!public class SingleVsMultiThread { public static void main(String[] args) { Runnable task = () -> { for (int i = 1; i  Runnable을 사용하여 멀티 쓰레드 구현 일반적으로 Java에서 멀티 쓰레드를 만들려면 두 가지 방법Thread 클래스를 상속하는 방법Runnable 인터페이스를 구현하는 방법 (이 코드..

JAVA 2025.03.11

Java Stream API 주요 메서드 정리

1. 스트림생성 메서드설명예제Stream.of(T... values)개별 요소로 스트림 생성Stream.of(1, 2, 3, 4)Arrays.stream(T[] array)배열을 스트림으로 변환Arrays.stream(new int[]{1, 2, 3})Collection.stream()리스트, 셋 등의 컬렉션을 스트림으로 변환List.of(1,2,3).stream() 2. 필터링 (Filtering)메서드설명예제filter(Predicate predicate)조건을 만족하는 요소만 남김list.stream().filter(n -> n > 5)distinct()중복 요소 제거list.stream().distinct() 3. 변환 (Mapping)메서드설명예제map(Functionmapper)요소를 다른 값..

JAVA 2025.02.28

자바 기본 다지기 최종

쓰레드(Thread)란?쓰레드는 프로그램 내에서 독립적으로 실행되는 하나의 작업 단위싱글 쓰레드 는 한 번에 하나의 작업만 처리하지만 멀티쓰레드는 여러 작업을 동시에 처리 가능멀티 쓰레드를 활용하면 여러 작업을 병렬로 수행할 수 있어 처리 성능을 향상시킬 수 있다. 싱글 쓰레드(Single Thread) 싱글 쓰레드는 한 명의 일꾼이 작업을 처리하는 것과 같습니다.일꾼이 한 명이기 때문에 여러 개의 작업이 있다면 순차적으로 처리해야 합니다.main() 메서드는 프로그램 시작과 동시에 생성되는 하나의 쓰레드입니다.public class Main { public static void main(String[] args) { System.out.println("::: main 쓰레드 시작 ::..

JAVA 2025.02.27

자바 기초 문법 다지기 4

제네릭(Generic)이란?제네릭은 클래스, 메서드 등에 사용되는 타입 매개변수를 의미타입을 미리 지정하지 않고 사용 시점에 유연하게 결정할 수 있는 문법제네릭을 활용하면 코드 재사용성과 타입 안정성을 보장하지만 과도하게 사용하면 오히려 복잡해질 수 있으므로 주의public class GenericBox { // 제네릭 클래스 private T item; public GenericBox(T item) { this.item = item; } public T getItem() { return this.item; }}// 타입소거public class Main { public static void main(String[] args) { ..

JAVA 2025.02.26

자바 기초 문법 다지기 3

예외(Exception)란?예외는 프로그램 실행 중 예상하지 못한 상황이 발생하는 것을 의미의도적으로 예외를 발생시킬 때는 throw 키워드를 통해 발생예외를 처리하지 않으면 프로그램이 중단그래서 예외처리(try-catch)를 통해 프로그램이 안정적으로 실행 가능예외 종류의도하지 않은 예외( RuntimeException - UncheckedException )의도한 예외( Exception - CheckedException) 의도하지 않은 예외( RuntimeException - UncheckedException )컴파일러가 예외 처리를 강제하지 않는 예외예외 처리를 하지 않아도 컴파일 오류(빨간 줄) 가 발생하지 않음처리되지 않은 예외는 계속 프로그램 시작 지점까지 전파끝내 예외가 처리되지 않으면 프..

JAVA 2025.02.26