JAVA/포스팅

자바 스트림(stream)

짜집퍼박사(짜박) 2023. 11. 22. 00:52

자바 스트림(Stream)은 데이터를 다루는데 자주 사용되는 새로운 추상화입니다. 스트림은 데이터의 흐름을 나타내며, 데이터를 다루는데 자주 사용되는 고차원적인 함수형 프로그래밍의 스타일을 지원합니다. 스트림은 한 번만 사용할 수 있는 데이터 시퀀스로, 데이터를 처리하는 연산들을 지원합니다.

 

스트림의 주요 특징과 개념

1. 원본 데이터 소스

스트림은 컬렉션, 배열 또는 I/O 자원과 같은 원본 데이터 소스에서 생성됩니다.

 

2. 함수형 프로그래밍 지원

스트림은 함수형 인터페이스를 기반으로 구현되어 있습니다. 이는 람다 표현식이나 메서드 참조와 함께 사용할 수 있음을 의미합니다.

 

3. 내부 반복(Internal Iteration)

스트림은 내부 반복을 지원합니다. 내부 반복은 개발자가 명시적으로 루프를 작성하지 않고도 컬렉션의 각 요소를 처리할 수 있게 합니다.

 

4. 지연 연산(Lazy Evaluation)

스트림은 지연 연산을 통해 필요한 경우에만 연산을 수행합니다. 이는 성능을 향상시킬 수 있습니다.

 

5. 파이프라인 연산

여러 연산을 조합하여 복잡한 데이터 처리 파이프라인을 만들 수 있습니다. 스트림 파이프라인은 중간 연산과 최종 연산으로 나눌 수 있습니다.

 

6. 불변성과 무상태성

스트림은 원본 데이터를 변경하지 않고 새로운 스트림을 생성하며, 각각의 연산은 무상태성(stateless)이어야 합니다.

 

스트림 두 가지 종류

1. 중간 연산(Intermediate Operations)

중간 연산은 스트림을 리턴하며, 여러 중간 연산을 연결하여 파이프라인을 형성할 수 있습니다. 중간 연산은 지연 연산을 수행하며, 예시로 filter, map, sorted 등이 있습니다.

List<String> result = myList.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .sorted()
    .collect(Collectors.toList());

 

2. 최종 연산(Terminal Operations)

최종 연산은 스트림 파이프라인을 종료하고 최종 결과를 생성합니다. 최종 연산은 스트림의 모든 요소를 소모하며, 예시로 forEach, collect, reduce 등이 있습니다.

long count = myList.stream()
    .filter(s -> s.length() > 3)
    .count();

스트림을 사용하면 데이터 처리 코드를 더 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리의 장점도 활용할 수 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 스트림의 중간연산  (0) 2023.11.23
자바 스트림 만들기  (0) 2023.11.23
자바 Predicate의 결합  (0) 2023.11.22
자바 Function의 합성  (0) 2023.11.22
자바 java.util.function패키지  (0) 2023.11.22