[Java] Java 스트림(Stream) API 완벽 가이드: 기본 개념부터 활용까지
1. Java Stream API란?
Java 8에서 도입된 Stream API는 컬렉션(List, Set, Map 등)의 요소를
**함수형 프로그래밍 방식**으로 처리할 수 있도록 도와줍니다.
반복문(for
)을 사용하는 기존 방식보다 코드가 간결하고 가독성이 좋아지는 장점이 있습니다.
2. Stream의 주요 특징
- ✔ **데이터를 한 번만 처리** (반복 사용 불가)
- ✔ **원본 컬렉션을 변경하지 않음** (Immutable)
- ✔ **함수형 스타일의 코드 작성 가능**
- ✔ **병렬 처리(Parallel Processing) 지원**
3. Stream 기본 사용법
Stream을 활용하여 리스트 데이터를 필터링, 변환, 집계하는 방법을 살펴보겠습니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 1. "C"로 시작하는 이름만 필터링
List filteredNames = names.stream()
.filter(name -> name.startsWith("C"))
.collect(Collectors.toList());
System.out.println(filteredNames); // 출력: [Charlie]
}
}
4. Stream 주요 연산
메서드 | 설명 | 예제 코드 |
---|---|---|
filter() |
조건을 만족하는 요소만 필터링 | stream.filter(x -> x > 10) |
map() |
각 요소를 변환 | stream.map(String::toUpperCase) |
sorted() |
데이터 정렬 | stream.sorted() |
limit(n) |
n개의 요소만 반환 | stream.limit(5) |
collect() |
결과를 컬렉션으로 변환 | stream.collect(Collectors.toList()) |
5. Stream을 활용한 데이터 변환
List 데이터를 대문자로 변환하는 예제입니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamTransform {
public static void main(String[] args) {
List names = Arrays.asList("Alice", "Bob", "Charlie");
List upperCaseNames = names.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseNames); // 출력: [ALICE, BOB, CHARLIE]
}
}
6. Stream을 활용한 데이터 집계
숫자 리스트에서 합계를 구하는 예제입니다.
import java.util.Arrays;
import java.util.List;
public class StreamSum {
public static void main(String[] args) {
List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.mapToInt(Integer::intValue)
.sum();
System.out.println(sum); // 출력: 15
}
}
7. Parallel Stream을 활용한 병렬 처리
대량의 데이터를 처리할 때 parallelStream()
을 사용하면 여러 CPU 코어를 활용하여 성능을 향상시킬 수 있습니다.
import java.util.Arrays;
import java.util.List;
public class ParallelExample {
public static void main(String[] args) {
List names = Arrays.asList("Alice", "Bob", "Charlie", "David");
names.parallelStream()
.forEach(name -> System.out.println(Thread.currentThread().getName() + " : " + name));
}
}
✅ **주의사항:** - **Parallel Stream은 무조건 빠른 것이 아님**
→ 작은 데이터셋에서는 오히려 성능 저하 가능
- **멀티스레드 환경에서 동기화 문제 발생 가능**
📌 정리
- ✔ Java Stream API는 함수형 프로그래밍 스타일을 적용할 수 있도록 도와줌
- ✔
filter(), map(), sorted(), limit()
등의 연산을 활용하여 데이터를 효과적으로 변환 가능 - ✔
collect()
를 사용하여 리스트, 맵 등으로 변환 가능 - ✔
parallelStream()
을 활용하면 병렬 처리 가능하지만 신중하게 사용해야 함
🔗 다른 Java 최적화 관련 글도 함께 확인해보세요!
'개발 생산성 & 코드 최적화 > 코드 리팩토링 & 최적화' 카테고리의 다른 글
[개발 생산성 & 코드 최적화] Java Optional 클래스 사용법과 NullPointerException 예방 (0) | 2025.03.19 |
---|---|
[Java] Stream API 활용법 및 성능 최적화 (1) | 2025.03.12 |
단일 책임 원칙(SRP) 적용하여 코드 개선하기 (0) | 2025.03.11 |
[개발 팁] 코드 리팩토링 필수 원칙: 클린 코드 작성법 (0) | 2025.03.11 |