목록전체 (34)
프로그래밍 공부
🔍 쓰레드(Thread)란?쓰레드는 하나의 프로그램(프로세스) 내에서 독립적으로 실행되는 작은 실행 단위이다.Java 프로그램은 기본적으로 단일 쓰레드(main thread)로 실행되지만,여러 개의 쓰레드를 생성하면 병렬(병행) 처리가 가능하다. 🤔 프로세스 vs 쓰레드구분프로세스 (Process)쓰레드 (Thread)실행 단위독립적인 실행 단위프로세스 내부의 실행 단위메모리 공유X (독립적)O (같은 프로세스 내에서 공유)생성 비용높음 (OS가 새로운 프로세스를 생성)낮음 (프로세스 내에서 생성)통신 방식IPC (Inter-Process Communication) 필요공유 메모리 활용🎀 자바에서 쓰레드 생성 방법(1) Thread 클래스를 상속받는 방법class MyThread extends T..
Java에서 입출력(I/O)을 다루는 대표적인 방식에는 기본적인 I/O (java.io 패키지)와New I/O (NIO, java.nio 패키지) 그리고 NIO.2 (java.nio.file 및 기타 보강된 기능)가 있다.📚 Java NIO란?Java NIO는 기존의 java.io 패키지를 보완하며, 비동기적이고 버퍼 기반의 고성능 I/O를 지원하는 API이다. (1) NIO의 주요 특징버퍼(Buffer) 기반: 기존의 InputStream 및 OutputStream은 바이트 스트림을 직접 처리했지만, NIO는 Buffer를 활용하여 데이터를 처리채널(Channel) 기반: 기존 I/O는 스트림(Stream) 기반이지만, NIO에서는 Channel을 통해 읽기/쓰기 작업을 수행비동기(Non-blocki..
🔍 I/O 스트림의 분류1. 데이터 단위에 따른 분류바이트 스트림(Byte Stream)1바이트(8비트) 단위로 데이터 처리입력: InputStream과 그 하위 클래스출력: OutputStream과 그 하위 클래스예시 클래스: FileInputStream, FileOutputStream, BufferedInputStream, BufferedOutputStream문자 스트림(Character Stream)2바이트(16비트, UTF-16) 단위로 문자 처리입력: Reader와 그 하위 클래스출력: Writer와 그 하위 클래스예시 클래스: FileReader, FileWriter, BufferedReader, BufferedWriter2. 기능에 따른 분류기본 스트림: 실제 데이터를 읽고 씀FileInp..
1️⃣ LocalDate날짜(연, 월, 일)를 표현하고, 시간 정보는 포함하지 않는다.(ex. 2025-02-22)import java.time.LocalDate;public class Main { public static void main(String[] args) { // 현재 날짜 가져오기 LocalDate today = LocalDate.now(); System.out.println("오늘 날짜: " + today); // 특정 날짜 생성 LocalDate specificDate = LocalDate.of(2025, 2, 22); System.out.println("특정 날짜: " + specificDate); ..
📚 최종 연산최종 연산은 스트림 처리의 마지막 단계에서 결과를 반환하거나 처리하는 연산.최종 연산이 호출될 때 중간 연산이 실제로 실행된다.1️⃣ sum()스트림 요소의 합계 반환.📈 적용 대상: IntStream, LongStream, DoubleStreamint sum = IntStream.of(1, 2, 3, 4, 5).sum(); // 출력: 152️⃣ count()스트림의 요소 개수 반환. (long 타입으로 반환)long count = Stream.of("a", "b", "c").count(); // 출력: 33️⃣ average()스트림 요소의 평균값 반환. (OptionalDouble 타입으로 반환)📈 적용 대상: IntStream, LongStream, DoubleStreamOp..
📚 병렬 스트림스트림의 요소들을 여러 스레드에서 병렬로 처리하여 성능을 향상시키는 스트림.내부적으로 'ForkJoinPool'을 사용하여 작업을 분할하고 병렬로 실행한다.대용량 데이터 처리나 계산 집약적인 작업에서 CPU 활용도를 높여 처리 속도를 개선할 수 있다. ⚡ 병렬 스트림 생성 방법 1, 2List numbers = Arrays.asList(1, 2, 3, 4, 5);// 기존 스트림을 병렬 스트림으로 변환numbers.stream().parallel().forEach(System.out::println);// 컬렉션에서 바로 병렬 스트림 생성numbers.parallelStream().forEach(System.out::println); 🚀 병렬 스트림과 일반 스트림 차이일반 스트림 (st..
📚 스트림 이란?컬렉션(Collection) 등의 데이터를 선언적(declarative)으로 처리할 수 있도록 도와주는 강력한 도구.스트림을 사용하면 데이터를 필터링, 변환, 집계 등의 작업을 간결하고 효율적으로 수행할 수 있다.특히 함수형 프로그래밍 스타일로 데이터를 처리할 수 있게 해준다. 데이터의 흐름: 스트림은 데이터 저장소(예: 리스트, 배열)가 아닌, 데이터의 흐름을 처리한다.선언형 프로그래밍: 반복문 대신 선언형 코드로 가독성 향상중간 연산과 최종 연산: 스트림 연산은 중간 연산과 최종 연산으로 구분지연 실행(Lazy Evaluation): 중간 연산은 최종 연산이 실행될 때까지 수행되지 않는다.병렬 처리 지원: .parallelStream()을 사용해 손쉽게 병렬 처리 가능🔨 스트림 생..
📚 Optional 클래스의 기본 개념Optional는 값이 있을 수도 있고, 없을 수도 있는 컨테이너이다.null을 반환하는 대신 Optional 객체를 반환하여 null 체크 로직을 줄이고, 함수형 프로그래밍 스타일로 코드를 작성할 수 있다. (NullPointerException을 방지)📝 Optional 객체 생성 방법Optional.of(T value)null이 아닌 값을 가지고 Optional 객체 생성null 값이면 NullPointerException 발생Optional optional = Optional.of("Hello");System.out.println(optional.get()); // Hello Optional.ofNullable(T value)null 여부에 따라 Optio..
🔍 메서드 참조란? 메서드 참조(Method Reference)는 람다 표현식을 더 간결하게 표현하는 방법이다.메서드 참조를 사용하면 기존 메서드 이름을 그대로 참조하여 람다식을 대체할 수 있다. ✅ 람다식 vs 메서드 참조 비교 💡 람다식list.forEach(s -> System.out.println(s)); 💡 메서드 참조list.forEach(System.out::println);두 코드는 동일한 동작을 수행한다.메서드 참조는 람다식이 단순히 메서드를 호출하는 경우 사용된다!🏷️ 메서드 참조의 종류와 예제타입문법예제설명✅ static 메서드 참조ClassName::staticMethodMath::max클래스의 static 메서드를 참조✅ 인스턴스 메서드 참조instance::instanc..
🔍 람다 표현식이란?람다 표현식(Lambda Expression)은 익명 함수를 간결하게 표현하는 방법이다.메서드를 간단한 식으로 작성할 수 있어 코드의 가독성과 유지보수성을 높인다.✅ 람다 표현식의 핵심 목적 간결한 코드 작성 (익명 클래스 대체)함수형 프로그래밍 지원컬렉션 처리 및 멀티스레딩에서 코드 단순화함수형 인터페이스와 함께 사용 ✍ 람다 표현식 기본 문법(매개변수) -> { 실행문 } 요소설명(매개변수)메서드의 매개변수 (없을 수도 있음)->람다 식별자 ("goes to" 의미){ 실행문 }메서드의 본문 (하나의 문장이면 중괄호 생략 가능) 🎯 예제: 다양한 람다 표현식// 매개변수와 반환값이 없는 경우() -> System.out.println("Hello, Lambda!");// 매개변..