본문 바로가기

JAVA34

[자바] 스트림 API - 병렬 스트림 자바의 병렬 스트림은 Java 8에서 도입된 기능으로, 데이터를 병렬로 처리할 수 있게 해주는 스트림 API의 확장이다.병렬 스트림은 멀티코어 환경에서 작업을 여러 스레드로 분산시켜 처리 속도를 향상시키는 것이 목적이다.스트림에 parallel() 메서드만 추가하면, 스트림이 병렬로 처리된다.public class Test { public static void main(String[] args) { List fruits = List.of("apple", "banana", "mango", "peach", "orange"); long startTime = System.currentTimeMillis(); fruits.stream() .pa.. 2025. 4. 8.
[자바] ForkJoinPool Fork-Join 패턴은 대규모 작업을 작은 단위로 분할(Fork)하여 병렬로 처리(Execute)한 후, 결과를 합치는(Join) 병렬 프로그래밍 패턴이다. 분할 정복 알고리즘의 멀티스레딩 패턴이라고 볼 수 있다. 자바는 Fork-Join 패턴을 구현하기 위한 Fork/Join 프레임워크를 제공한다.Fork Join 프레임워크의 주요 클래스는 다음과 같다. 1. ForkJoinPool병렬 작업을 처리할 수 있는 특수한 스레드 풀로 기본적으로 사용 가능한 프로세서 수 만큼 스레드를 생성한다.ForkJoinTask를 실행하는 데 사용되며, 내부적으로 Work-Stealing 알고리즘을 사용해 효율적인 병렬 처리를 한다.ForkJoinPool pool = new ForkJoinPool(); // 기본 스레드.. 2025. 4. 7.
[자바] 스트림 API - 활용 중간 연산 - FlatMapmap은 각 요소를 단순히 하나의 값으로 변환 flatMap은 각 요소를 또 다른 컬렉션이나 스트림으로 변환한 뒤, 그 결과를 하나의 스트림으로 평탄화 FlatMap 동작 과정아래와 같이 중첩 리스트 구조를 가진 컬렉션이 있다고 하자. [[1, 2], [3, 4], [5, 6]]public class Test { public static void main(String[] args) { List> list = List.of( List.of(1, 2), List.of(3, 4), List.of(5, 6) ); System.out.println("list = ".. 2025. 4. 6.
[자바] 스트림 API 자바 8에서 도입된 스트림 API는 컬렉션이나 배열의 데이터를 효율적으로 처리할 수 있도록 도와주는 기능이다.원본 데이터를 변경하지 않으며, 연산 파이프라인을 통해 중간 연산과 최종 연산을 체이닝하여 필터링, 변환, 계산 등을 수행할 수 있다.이를 통해 코드의 가독성을 높이고, 간결하면서도 강력한 데이터 처리가 가능하다.스트림 생성스트림은 다양한 방법으로 생성할 수 있다. 1. 컬렉션에서 생성public class Test { public static void main(String[] args) { List fruits = List.of("apple", "banana", "mango", "peach", "orange"); Stream stream = fruits.stream.. 2025. 4. 5.
[자바] 람다식과 함수형 인터페이스 람다식은 자바 8에서 도입된 기능으로, 익명 함수를 간결하게 표현하는 방법이다. 익명 함수는 이름이 없는 함수로, 일급 객체로 취급되기 때문에 변수처럼 사용하거나 매개변수로 전달할 수 있다.일급 객체 (First-Class Object)란?- 변수에 저장 가능- 함수의 매개변수로 전달 가능- 함수의 반환값으로 사용 가능위 조건을 만족하는 객체를 일급 객체라고 한다. 먼저 람다식을 알아보기 전에, 자바에서 전통적으로 함수를 선언하는 방식을 살펴보겠다.아래의 코드는 자바에서 메서드 선언 방식의 예이다.public class Test { public static void method() { System.out.println("method 호출"); } public static vo.. 2025. 4. 3.
[자바] 디폴트 메서드 디폴트 메서드(default method)는 Java 8부터 추가된 기능으로 인터페이스에서 메서드의 기본 구현을 제공할 수 있도록 하는 기능이다.기존 인터페이스는 추상 메서드만을 제공하고 하위 클래스에서 이를 구현하도록 강제했는데 디폴트 메서드가 생긴 이유는 무엇일까? 다음 예제를 살펴보자.interface Vehicle { void move(); // 추상 메서드}class Car implements Vehicle { @Override public void move() { System.out.println("자동차가 움직인다."); }}class Bus implements Vehicle { @Override public void move() { .. 2025. 4. 3.
[자바] Optional 자바에서 null은 값이 없음을 나타내는 방법인데, null 참조에 대해 메서드를 호출하면 NullPointerException이 발생할 수 있다.Optional 클래스는 null을 안전하게 처리하기 위해 도입된 기능으로 해당 클래스는 값이 존재할 수도, 없을 수도 있음을 표현한다. Optional 생성 방법Optional optional = Optional.of("Hello"); // 값이 반드시 있어야 함Optional optionalEmpty = Optional.empty(); // 비어 있는 OptionalOptional optionalNullable = Optional.ofNullable(null); // null 허용 Optional의 값을 존재 여부 확인Optional optional = .. 2025. 4. 3.
[자바] URL 인코딩 웹은 데이터를 전송할 때 URL의 특정 문자들을 인코딩해서 전송한다.왜냐하면 HTTP 메세지에서 start line, HTTP 헤더의 이름은 항상 ASCII를 사용하기 때문이다.(메세지 바디는 UTF-8 같은 다른 인코딩 방식 사용 가능)따라서 URL에 적을 수 없는 문자를 전송할 수 있도록 변환하여 데이터의 변조나 손실이 없게 하기 위함이다.퍼센트 인코딩 방식위에서 ASCII 문자만 URL에 적을 수 있다고 하였다. (공백, 특수문자도 불가능)그럼 URL에 한글이 포함되면 어떻게 될까?예를 들어 UTF-8은 한글을 3byte로 표현한다. 즉 한글 ‘가’의 경우 [EA, B0, 80]의 바이트 집합으로 변환된다.그리고 이렇게 16진수로 표현된 바이트에 %를 붙인다.즉 ‘가’ → %EA%B0%80 으로 인.. 2024. 12. 25.
[자바] 애노테이션(Annotation) 애노테이션은 사전적 의미로 주석이라는 뜻이다.즉 애노테이션은 프로그램 코드가 아니며 주석과 비슷하다고 이해하면 된다. 하지만 일반적인 주석은 컴파일 시점에 모두 제거가 되지만, 애노테이션은 런타임 시점에 해석가능한 메타데이터를 제공해서 활용할 수 있다는 차이가 있다.애노테이션 정의 방법public @interface MyAnnotation { String value(); int count() default 0; String[] tags() default {}; Class data() default Target.class; // 클래스 정보는 가능}@interface 키워드로 애노테이션을 정의한다.모든 애노테이션은 Annotation 인터페이스를 확장하지만 위와 같이 정의만 하면 상속.. 2024. 12. 25.