1116 | 자바의 정석 기초편 :: ch14-15~14-16 (스트림)
스트림
: 스트림 = 데이터의 연속적인 흐름
: 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
(* 컬렉션, 배열 같이 여러 데이터를 저장하고 있는 것들=데이터소스)
(* 표준화된 방법 : 컬렉션 프레임웍으로 완벽하게 구현하진 못함 (list,set,map 각자 다 방법이 다름) 👉 스트림이 나오면서 정말로 통일됨
: 컬렉션이나 배열 같은 다양한 데이터소스 ▶ 스트림 생성 가능 ▶ 그 이후로는 작업 방식이 똑같아짐 ( 원랜 이 작업 과정이 각자 다 달랐음)
✔ 스트림을 이용한 작업 순서 (스트림이 제공하는 기능- 중간연산과 최종연산)
1. 스트림 만들기
2. 중간연산 (0~n번)
3. 최종연산 (1번)
4. 결과값 얻음
스트림의 특징
1. 스트림은 데이터소스로부터 데이터를 읽기만 할 뿐 변경하지 않는다 (read only)
2. 스트림은 Iterator처럼 일회용(필요하면 다시 스트림을 생성해야함)
3. 최종연산 전까지 중간연산이 수행되지 않음 - 지연된 연산
4. 작업을 내부반복으로 처리 - 내부반복
5. 작업을 병렬로 처리 - 병렬스트림
: 멀티스레드로 병렬처리함
: 함수형언어 (FP)의 특징은 빅데이터를 처리하는 것 . ▶ 멀티스레드가 나눠서 처리하는게 효율적 ▶ 병렬스트림 기능 제공
✔ 기본형 스트림 (IntStream, DoubleStream, LongStream) 👉 효율적 작업 추구
: 오토박싱 & 언박싱 비효율 제거 (Stream <Integer> 대신 intStream사용)
👉 지네릭 Stream<T>에는 기본형이 불가하고 참조형만 가능하므로 오토박싱을 통해 기본형 ▶ 참조형으로 변환됨
데이터소스가 기본형일 때 , 빅데이터는 오토박싱/언박싱 변환시간이 많이 소요되므로 기본형 스트림 사용
: 숫자와 관련된 유용한 메서드를 Stream <T>보다 더 많이 제공
👉 Stream<T>는 들어오는게 뭔지 모르므로 count정도만 갖고있는데 intStream은 숫자인걸 알고 있어서 sum,average등 다른 메소드 제공.