[Java] Java8 설계의 밑바탕 - Stream 처리

GilLog·2021년 6월 9일
0

ModernJavaInAction

목록 보기
4/7

🙆‍♂️ import 🙇‍♂️

Modern Java in Action


Stream 처리

Java 8 의 설계의 밑바탕이 되는 세 가지 프로그래밍 개념이 있다.

그 중 하나가Stream 처리이다.

Stream이란 한 번에 한 개씩 만들어지는 연속적인 Data 항목들의 집합이다.

Java 8의 Stream 관련 내용을 살펴보기 전 Stream 처리에 대해서 먼저 예시로 살펴보려 한다.

이론상 Program은 입력 Stream에서 Data를 한 개씩 읽어 들이고, 출력 Stream에서 Data를 한 개씩 기록한다.

예시로 Unix나 Linux의 많은 Program은 표준 입력(Unix, C의 stdin, Java의 System.in)에서 Data를 읽은 후에,

Data를 처리 결과를 표준 출력(Unix, C의 stdout, Java System.out)으로 기록한다.

Unix의 cat 명령어는 두 파일을 연결해서 Stream을 생성하고, tr은 Stream 문자열을 번역하고, sort는 Stream의 행을 정렬하고, tail -3은 Stream의 마지막 3개 행을 출력한다.

아래 명령어를 살펴보자,

cat gillog1 gillog2 | tr "[A-Z]" "[a-z]" | sort | tail -3

이 명령어는 gillog1, gillog2 파일의 단어를 소문자로 바꾼 후 사전 순으로 단어를 정렬 할때 가장 마지막 세 단어를 출력해주는 명령어이다.

Unix에서 파이프라인(|)으로 연결한 여러 명령어들(cat, tr, sort, tail)은 병렬로 실행한다.

그래서 위 명령어 예제에서 앞선 cat이나 tr 명령이 완료되지 않은 시점에서도 sort가 행을 처리하기 시작할 수 있다.


java.util.stream

Java 8에서는 java.util.stream 패키지에 Stream API가 추가되었다.

Stream 패키지에 정의된 Stream<T>T 형식으로 구성된 일련의 항목을 의미한다.


이전 Unix 명령어 예제에서 복잡하게 파이프라인을 통해 명령어를 조합하여 Stream을 살펴본 것처럼,

Stream API는 파이프라인을 만드는데 필요한 많은 Method 들을 제공한다.

Stream API 핵심

Stream API의 핵심기존에 Java에서는 한 번에 한 항목을 처리했지만,

이제 작업을 고수준으로 추상화하고 일련의 Stream으로 만들어 처리할 수 있다는 것이다.

또한 Stream 파이프라인을 이용하면 입력 부분을 여러 CPU Core에 할당할 수 있다.

Thread라는 복잡한 작업을 사용하지 않으면서도 병렬성을 손쉽게 챙길 수 있는 것이다.

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

0개의 댓글