스트림(Stream) 개요

스트림이란?

 

다수의 데이터를 다루기 위해서 배열 또는 컬렉션을 통하여 데이터를 담고 사용하기 위하여 for문, Iterator를 이용하였다.
그러나 이러한 방식으로 코드를 작성할 경우 코드가 길어지고 재사용성도 떨어지며

데이터 소스(데이터를 담은 것)마다 각자의 방식으로 다뤄져야한다.

 


String[] strArr = { "aaa", "bbb", "ccc" }; // 배열에 담음
List<String> strList = Arrays.asList(strArr); // 컬렉션에 List에 담음;

 

정렬과 요소들을 출력할 경우


Arrays.sort(strArr); // 데이터 소스가 배열일 경우 Arrays 클래스에 sort를 사용
Collections.sort(strList); // 컬렉션일 경우 

for(String str : strArr)
    System.out.println(str);

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

위와같이 수행할 작업도 같고 더 나아가 메서드 명도 동일한 경우도 있다.

그러나 데이터 소스에 따라 처리해야하는 방식이 다르고 코드도 각 작업들을 별도로 처리해야했다.

이러한 문제점을 해결하기 위하여 'stream'이 만들어졌다.

 


Stream<String> strStream1 = strList.stream(); //컬렉션을 스트림으로 생성
Stream<String> strStream2 = Arrays.stream(strArr); // 배열을 스트림으로 생성

strStream1.sorted().forEach(System.out::println);
strStream2.sorted().forEach(System.out::println);

스트림으로 생성한 코드를 확인해보면 데이터 소스에 따라 스트림을 만들기 위한 방법만 확인하면

이후에는 데이터를 다루는 작업을 위하여 Stream 클래스에서 제공하는 메서드를 통하여 

통일되게 다룰 수 있다.

 

스트림 특징?

1. 기존의 데이터 소스를 변경하지 않는다.

 

기존의 데이터 소스에서 데이터를 읽기만 할 뿐 기존 데이터 소스에 영향을 주지 않는다.

즉, 스트림에서 데이터를 변경해도 기존 데이터 소스에는 변경이 발생하지 않는다. 

 

2. 일회성이다.

 

스트림은 최종연산시 데이터 요소를 소모하게 되는데

이 때, 데이터를 모두 소모하면 더 이상 기존에 stream을 사용할 수 없다.

1번 특징과 연관하여 기존의 데이터 소스에는 영향을 주지 않기에

기존 데이터 소스를 통하여 반복적으로 스트림 생성이 가능하다.

 

3. 메서드 내부적으로 반복 처리를 한다.

 

위에 첫 코드와 같이 스트림을 사용하지 않을 경우 외부적으로 반복문이나 Iterator를 통하여 처리를 해주어야하는데,

스트림의 경우 메서드만 호출하면 내부적으로 반복을 수행하기에 별도로 반복처리를 하지 않아도 된다.

 

'P.L > Java' 카테고리의 다른 글

java.util.Arrays 클래스를 활용한 배열복사  (0) 2023.01.19
String 클래스 - repeat()  (0) 2022.12.20
기본형 타입 형변환  (0) 2020.08.02
기본형 데이터 타입  (0) 2020.08.02
콘솔에 입`출력 하는 방법?  (0) 2020.08.02