개발 생산성 & 코드 최적화/코드 리팩토링 & 최적화
[Java] Stream API 활용법 및 성능 최적화
Jinsapp
2025. 3. 12. 17:55
[Java] Stream API 활용법 및 성능 최적화
1. Stream API란?
Java 8에서 도입된 Stream API는 **컬렉션(List, Set, Map) 등의 데이터를 처리하는 함수형 스타일의 기능**을 제공합니다.
반복문(for
)을 사용하는 기존 방식보다 간결하고, 성능이 최적화된 방식으로 데이터를 처리할 수 있습니다.
2. Stream API 기본 사용법
✅ 컬렉션을 스트림으로 변환
// 리스트(List)를 스트림으로 변환
List list = Arrays.asList("Apple", "Banana", "Cherry");
Stream stream = list.stream();
✅ 스트림 사용 예제
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List fruits = Arrays.asList("Apple", "Banana", "Cherry", "Avocado");
// "A"로 시작하는 단어만 필터링하고 출력
fruits.stream()
.filter(fruit -> fruit.startsWith("A"))
.forEach(System.out::println);
}
}
📌 실행 결과:
Apple
Avocado
3. Stream API 주요 기능
메서드 | 설명 | 예제 |
---|---|---|
filter() |
조건을 만족하는 데이터만 필터링 | stream.filter(x -> x > 10) |
map() |
데이터 변환 | stream.map(x -> x * 2) |
sorted() |
데이터 정렬 | stream.sorted() |
forEach() |
각 요소에 대해 작업 수행 | stream.forEach(System.out::println) |
collect() |
리스트 등으로 변환 | stream.collect(Collectors.toList()) |
4. Stream vs 일반 반복문 성능 비교
✅ 일반 반복문 (for-loop)
List numbers = Arrays.asList(1, 2, 3, 4, 5);
for (int num : numbers) {
System.out.println(num * 2);
}
✅ Stream API
numbers.stream()
.map(num -> num * 2)
.forEach(System.out::println);
✔ **Stream API는 코드가 간결해지고, 멀티코어 환경에서 병렬처리도 가능**
5. 병렬 스트림(Parallel Stream) 활용
✅ 병렬 스트림 사용법
List numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream()
.map(num -> num * 2)
.forEach(System.out::println);
✔ parallelStream()
을 사용하면 **여러 개의 스레드가 병렬로 데이터를 처리하여 성능을 높일 수 있음**
6. Stream API 성능 최적화 방법
- ✔ **Stream 대신 기본 타입 스트림 (IntStream, LongStream) 사용** →
Stream<Integer>
보다IntStream
이 메모리 효율적 - ✔ **Parallel Stream 사용 시, 데이터 양과 CPU 코어 수 고려**
- ✔ **중간 연산(filter, map 등)은 최소화하고, 최종 연산(collect, forEach)을 효율적으로 사용**
🔍 결론
- ✔ **Stream API는 코드 가독성을 높이고, 데이터 처리 성능을 최적화**할 수 있음
- ✔ **기본 스트림을 사용하면 성능이 향상됨 (IntStream, LongStream)**
- ✔ **대용량 데이터 처리 시 병렬 스트림(Parallel Stream)을 활용하면 성능 개선 가능**