본문 바로가기
Develop

이것이 자바다 - 스트림과 병렬처리

by _dreamgirl 2020. 2. 22.
반응형

스트림

 - 자바8에 추가된 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있게 해주는 반복자

 

스트림 특징

  • 람다식으로 요소 처리 코드를 제공한다,
  • 내부 반복자를 사용하므로 병렬 처리가 쉽다.
  • 스트림은 중간 처리와 최종 처리를 할 수 있다.

 

병렬(parallel) 처리란 한 가지 작업을 서브 작업을 나누고, 서브 작업들을 분리된 스레드에서 병렬적으로 처리하는 것을 말한다. 

 

스트림의 종류

  • Stream, IntStream, LongStream, DoubleStream

스트림 파이프라인

 

리덕션(Reduction) 

  • 대량의 데이터를 가공해서 축소하는 것
  • 리덕션의 결과물로 바로 집계할 수 없을 경우 필터, 매핑, 정렬, 그룹핑 등의 중간 처리를 통해 결과물을 처리 할 수 있다.
  • 리턴 타입이 스트림이라면 중간 처리 메소드이고, 기본 타입이거나 OptionalXXX라면 최종 처리 메소드이다. 

 

중간단계

  • 필터링 : 중간 처리 기능으로 요소를 걸러내는 역할 ex) distinct, filter
  • 매핑 : 스트림의 요소를 다른 요소로 대체하는 역할
  • 정렬 : Comparable 구현 하거나 Comparator을 사용
  • 루핑 : 요소 전체를 반복하는 것, 최종 처리 메소드가 실행되지 않으면 지연되기 때문에 반드시 최종 처리 메소드가 호출이 되어야 동작한다.  ex) peek, forEach

 

Optional 클래스 

  • 집계하는 값이 존재 하지 않는 경우 디폴트 값을 설정할 수 있으며, 집계 값을 처리하는 Consumer도 등록할 수 있다.
  • isPresent 값이 저장되어 있는지 여부
  • orElse 값이 저장되어 있지 않은 경우 디폴트 값 설정
  • ifPresent 값이 저장되어 있을 경우 Consumer에서 처리

 

최종단계

  • 매칭 : 최종 처리 단계에서 요소들이 특정 조건에 만족하는지 확인하는 역할
  • 기존 집계 sum, count, average, max, min
  • 커스텀 집계(reduce) : 다양한 집계 결과물을 만들 수 있도록 제공하는 메소드
  • 수집 : 요소들을 수집. Collector.toList, toSet, toMap, toConcurrentMap(Thread Safe)

 

 

병렬처리

 

멀티 코어 CPU 환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말한다.

동시성 - 멀티 작업을 위해 멀티 스레드가 번갈아가며 실행하는 것을 말함. 

병렬성 - 멀티 작업을 위해 멀티 코어를 이용해서 동시에 실행하는 것을 말함.  

 

반응형

댓글