Java를 배워보자/8. 자바 8 이상의 새로운 기능

자바 기능스트림 API (8 이상)

_Blue_Sky_ 2024. 9. 27. 12:55
728x90
728x90

자바 8 이상의 강력한 도구: 스트림 API 심층 탐구

자바 8에서 도입된 스트림 API는 컬렉션 데이터를 처리하는 방식에 혁신을 가져왔습니다. 기존의 반복문 기반의 처리 방식에서 벗어나, 함수형 프로그래밍 스타일로 데이터를 선언적으로 처리할 수 있게 해주었습니다. 이를 통해 코드는 더욱 간결하고 명확해졌으며, 병렬 처리도 용이해졌습니다.

스트림 API란 무엇인가?

스트림(Stream)은 데이터 소스에서 추출된 연속된 요소들의 집합으로, 다양한 연산을 통해 데이터를 처리할 수 있는 추상적인 개념입니다. 스트림은 데이터 소스를 직접 변경하지 않고, 새로운 스트림을 생성하여 데이터를 변환합니다.

스트림의 특징

  • 데이터 소스를 변경하지 않음: 스트림 연산은 원본 데이터를 변경하지 않고 새로운 스트림을 생성합니다.
  • 일회용: 스트림은 한 번 소비되면 다시 사용할 수 없습니다.
  • 파이프라이닝: 여러 개의 스트림 연산을 연결하여 복잡한 데이터 처리 로직을 구현할 수 있습니다.
  • 내부 반복: 스트림은 내부적으로 반복을 수행하므로 개발자가 명시적으로 반복문을 작성할 필요가 없습니다.

스트림의 주요 연산

  • 중간 연산: 스트림을 변환하는 연산으로, 결과를 새로운 스트림으로 반환합니다.
    • filter: 조건에 맞는 요소만 선택합니다.
    • map: 각 요소를 다른 값으로 변환합니다.
    • flatMap: 각 요소를 스트림으로 변환하고, 모든 스트림을 하나의 스트림으로 합칩니다.
    • sorted: 요소를 정렬합니다.
    • distinct: 중복된 요소를 제거합니다.
    • limit: 지정된 개수의 요소만 선택합니다.
    • skip: 지정된 개수의 요소를 건너뜁니다.
  • 최종 연산: 스트림을 소비하고 결과를 반환하는 연산으로, 스트림을 종료시킵니다.
    • forEach: 각 요소에 대한 작업을 수행합니다.
    • collect: 스트림의 요소를 컬렉션으로 수집합니다.
    • reduce: 스트림의 요소들을 하나의 값으로 축소합니다.
    • anyMatch, allMatch, noneMatch: 조건을 만족하는 요소가 있는지 확인합니다.
    • findAny, findFirst: 임의의 요소 또는 첫 번째 요소를 찾습니다.

스트림 사용 예시

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 짝수만 필터링하고 제곱하여 리스트로 변환
List<Integer> squaresOfEvenNumbers = numbers.stream()
                                           .filter(n -> n % 2 == 0)
                                           .map(n -> n * n)
                                           .collect(Collectors.toList());

// 모든 요소의 합 계산
int sum = numbers.stream()
                 .reduce(0, Integer::sum);
.
 

스트림의 장점

  • 간결하고 명확한 코드: 반복문을 사용하지 않고 함수형 스타일로 데이터를 처리하여 코드 가독성이 향상됩니다.
  • 병렬 처리: 스트림은 내부적으로 병렬 처리를 지원하여 성능을 향상시킬 수 있습니다.
  • 유연성: 다양한 중간 연산과 최종 연산을 조합하여 복잡한 데이터 처리 로직을 구현할 수 있습니다.

스트림의 단점

  • 학습 곡선: 새로운 개념을 학습해야 하므로 초기에 어려울 수 있습니다.
  • 성능 오버헤드: 간단한 연산에는 오히려 반복문이 더 효율적일 수 있습니다.

스트림 활용 시 주의사항

  • 무분별한 사용: 모든 경우에 스트림이 반드시 효율적인 것은 아닙니다.
  • 병렬 처리 시 주의: 병렬 처리 시 스레드 안전성 문제가 발생할 수 있습니다.
  • 스트림은 일회용: 스트림은 한 번 소비되면 다시 사용할 수 없으므로 주의해야 합니다.

결론

자바 8에서 도입된 스트림 API는 컬렉션 데이터 처리 방식에 큰 변화를 가져왔습니다. 함수형 프로그래밍 스타일로 데이터를 처리함으로써 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 하지만 스트림을 효과적으로 활용하기 위해서는 충분한 학습과 이해가 필요합니다.

 

728x90
728x90