[JAVA] 스트림 (stream)

suyeon·2022년 9월 20일
0

JAVA

목록 보기
4/4

📌 스트림 (stream)

스트림은 데이터 소스를 추상화하고, 데이터를 자주 사용되는 메서드들을 정의해 놓았다.

데이터 소스를 추상화하였다는 것은, 데이터 소스가 무엇이던 간에 같은 방식(표준화된 방식)으로 다룰 수 있게 되었다는 것과 코드의 재사용성이 높아진다는 것을 의미한다.

스트림을 이용하면, 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다.

[ 특징 ]

1. 스트림은 데이터 소스(원본)를 변경하지 않는다.

데이터 소스로 부터 데이터를 읽기만할 뿐, 변경하지 않는다.
필요하다면, 정렬된 결과를 컬렉션이나 배열에 담아서 반환한다.

2. 스트림은 일회용이다.

한번 사용하면 닫혀서 다시 사용할 수 없다. 필요하다면 스트림을 다시 생성해야 한다.

3. 스트림은 작업을 내부반복으로 처리한다.

내부 반복이라는 것은 반복문을 메서드의 내부에 숨길 수 있다는 것이다.

for(String str : strList) System.out.println(str);
                       ↓
stream.forEach(System.out.println);

즉, forEach()는 메서드 안으로 for문을 넣은 것이다. 수행할 작업은 매개변수로 받는다.

4. 스트림은 다양한 연산을 이용해서 복잡한 작업들을 간단히 처리한다.

마치 데이터베이스에 SELECT문으로 질의(쿼리, query)하는 것과 같은 느낌이다.
스트림이 제공하는 연산은 중간 연산과 최종 연산으로 분류할 수 있다.

  • 중간연산 : 연산 결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있음
  • 최종연산 : 연산 결과가 스트림이 아닌 연산. 스트림에 요소를 소모하므로 단 한번만 가능

5. 스트림은 지연된 연산을 수행한다.

스트림은 최종 연산이 수행되기 전까지는 중간 연산이 수행되지 않는다.
중간 연산을 호출하는 것은 단지 어떤 작업이 수행되어야하는지를 지정해주는 것일 뿐이다.
최종 연산이 수행되어야 비로소 스트림의 요소들이 중간 연산을 거쳐 최종 연산에서 소모된다.

6. 스트림은 병렬 처리가 쉽다.

병렬 스트림은 스트림에 메서드를 호출만 하면 된다. 모든 스트림은 기본적으로 병렬 스트림이 아니다.

  • parallel() : 병렬 연산 O
  • sequential() : 병렬 연산 X

병렬처리가 항상 더 빠른 결과를 얻게 해주는 것은 아니다.

0개의 댓글