Java

그래서 Stream 이 뭔데? - Java

koucop 2020. 6. 1. 18:23

 

 

tl;dr

Java 8 에는 stream, 로맨틱, 성공적

 

 

 

서론

Java 8 에서 발표한 stream 은 자바를 사용하던 사람에게는 가뭄에 단비와도 같은 소식이라고 할 수 있다. 실제로 코드작성하는데 스트레스를 줄여주었고 다른 사람들과 협업하는데에도 지대한 영향을 끼치고 있다.

 

그렇다면 stream 이 뭐길래 Java 와 stream 은 뗄래야 뗄 수 없는 관계가 되었을까?

 

이것을 알기 위해서는 stream 이전에 배열이나 리스트와 같은 컬렉션 인스턴스를 어떻게 처리했는지 알아야 한다. 그리고 stream 을 이용해서 얼마나 간단하게 표현할 수 있는지까지 알아보면 무조건 stream 을 이용해야 겠다고 생각하게 될 것이다. 

 

 

 

본론

먼저 기존에 배열을 어떻게 처리했는지 알아보도록 하자.

1부터 10까지 담긴 배열을 생성하고 출력하고 싶을 때, 기존에는 아래와 같이 코드를 작성해야 했다.

int[] numArr = new int[10];
for(int i = 0; i < 10; i++) {
  numArr[i] = i + 1;
}
for(int i = 0; i < 10; i++) {
  System.out.println(numArr[i]);
}

stream 을 이용해서 똑같이 작동하는 코드를 작성해 보면 아래와 같다.

int[] numArr = IntStream.rangeClosed(1, 10).toArray();
Arrays.stream(numArr).forEach(System.out::println);

....?!! 가독성도 좋아지고 편리해 보이지 않는가?

이렇게 코드를 작성하면 실수할 여지도 줄어들고 코드가 직관적이여서 다른사람과 협업하면서 코드리뷰를 하는데에도 이점이 많다.

 

그렇다면 stream 의 구성은 어떻게 되어있을까?

 

stream 은 크게 생성, 가공, 결과도출 총 3가지로 나눌 수 있다.

 

생성에는

  • 배열 / 컬렉션 / 빈 스트림
  • Stream.builder() / Stream.generate() / Stream.iterate()
  • 기본 타입형 / String / 파일 스트림
  • 병렬 스트림 / 스트림 연결하기

가공에는

  • Filtering
  • Mapping
  • Sorting
  • Iterating

결과 도출에는

  • Calculating
  • Reduction
  • Collecting
  • Matching
  • Iterating

이 있다.

 

각 부분에 대한 더자세한 설명은 이후 포스팅에 세분화해서 다뤄보려고 한다.

 

 

 

결론

stream 에 대해 자세하게 알아보기에 앞서 기본적인 내용을 알아보았다. stream 은 앞서 말한 것처럼 배열이나 리스트를 처리하는데 있어서 손쉽게 코드작성을 할 수 있도록 도와주고 협업할 때에는 간결한 표현이 가능해 지므로 코드리뷰를 보다 쉽게 할 수 있도록 도와준다.

 

이래도 stream 쓸래? 안쓸래? 

난 쓸래!!! 

 

 

 

이번 포스팅에서는 간단하게 stream 에 대해 알아보았다. 이후에 stream 의 각 항목 에 대해서 자세히 다뤄 보도록 하겠다.

 

 

참조

https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

 

java.util.stream (Java Platform SE 8 )

Interface Summary  Interface Description BaseStream > Base interface for streams, which are sequences of elements supporting sequential and parallel aggregate operations. Collector A mutable reduction operation that accumulates input elements into a mutab

docs.oracle.com