21.09.15

.·2021년 10월 11일
0

playdata

목록 보기
35/35
post-thumbnail

DAY40

1) 병렬처리 : 프로그램 내의 계산 영역을 여러개로 나누어 각각에 대한 계산을 여러 프로세스에서 동시에 수행하는 것이다
2) 자바에서는 병렬처리를 Stream API를 통해 집계 또는 연산을 처리할 수 있도록 제공되며 병렬처리 또한 손쉽게 구현할 수 있도록  클래스와 메소드를 제공한다.
3) Stream API는 주로 배열이나 collection 등의 집합체를 바탕으로 값의 집계나 데이터를 처리하는 API이다.
4) Stream API의 stream은
		java.util.stream.Stream의 of(),
		java.util.Arrays의 stream(),
		java.util.Collection의 stream() 메소드를 통해 만들 수 있으며
		대상 객체를 스트림으로 변환하게 되면 Map,Reduce등의 집계를 간편하게 구현할 수 있다.
		
5) Stream의 인스턴스를 생성하는 주요 메소드를 확인해보자

	Collection<T> : stream() -> Collection의 요소를 바탕으로 Stream의 인스턴스 생성
	(List<> , Set<>, Map<>)
	Arrays  ([])      : stream(T [] array) -> 인수 array의 요소를 바탕으로 Stream인스턴스 생성
	Stream        : of(T....values) -> 인수 values를 바탕으로 Stream 인스턴스를 생성한다.
	(변동객체 T)
	
6) 객체 출력 : 스트림 변환 후 검색,집계, 연산 등을 구현한 다음 마지막에서 출력을 할 때 사용한다.
	void forEach(Consumer <? super T> consumer)
	void forEachOrdered(Consumer <? super T> consumer)
	collect() -> 콜렉션으로 리턴
	
7) Stream에서 작업은 크게 두개로 나뉜다

	- Map (intermediate operators) : stream 인스턴스의 각 요소를 조건에 맞춘 새로운 stream으로 검색하거나, 
	 								 다른 데이터 요소를 가진 stream 인스턴스를 생성하는 작업을 한다.
	       filter(Predicate<? super T> predicate) : predicate에 정의된 boolean의 리턴값이 true에 해당하는
	                                                                                                             요소만 Stream<T>로 반환
	       limit(long maxSize) : 요소의 처음부터 maxSize까지 요소의 Stream을 리턴
	       distinct() : 요소끼리 equals 메소드에서 비교하여 중복 항목을 제외한 Stream을 리턴
	       map(Function<? super T,? extends R> mapper)
	                  : 지정된 값을 변경 한 새로운 Stream을 리턴, 입력 T를 R로 변환하는 함수 인터페이스 Function을 매개인자로 갖는다. 
	       mapToLong()
	       mapToDouble()
	       flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
	                  : 입력된 T를 복수개의 R로 변환하는 map메소드로 flatMap에서 만들어진 stream은 자동으로 close된다. 
	       peek(Consumer<? super T> action) : 변환하는 작업을 테스트 할 때 사용하는 메소드이다.
	       						                                디버깅 용도로 어떤 값이 들어있는지 확인 하고 싶을 때 사용한다. 
	       						                                요소의 수에 어떠한 영향도 주지 않는다.   
		
	- Reduce (terminal operators) : 리턴받은 stream 인스턴스의 요소에 어떤 결과를 얻거나 요소를 사용하여
									출력하는 등의 작업을 담당한다.
									stream처리의 구현은 0개 이상의 중간 처리와 최종 처리를 순서대로 진행한다. 	
			  get() : Optional <T>에 들어있는 값을 리턴한다.
			  		    포함하고 있는 값이 없는 경우는 NoSuchElementException 예외를 발생한다. 
			  isPresent() : 값이 포함되어 있는 경우는 true, 포함되지 않은 경우는 false를 리턴한다.
			  orElse(T other) : 값이 포함되어 있는 경우는 그 값을 리턴하고 저장되어 있지 않은 경우는 인수 other를 리턴한다. 
			  orElseGet(Supplier<? extends T> other) : 값이 포함되어 있는 경우는 그 값을 리턴하고 
			                                                                                                 포함되지 않은 경우 supplier가 생성 한 값을 리턴한다.
			  orElseThrow(Supplier<? extends X> exceptionSupplier)
			            : 값이 포함되어 있는 경우는 그 값을 반환하고 포함되지 않은 경우 supplier가 발생시키는 예외를 생성한다.			                              
			  of(T value)
			  ofNullable(T value) : Optional의 static 메소드로 인수 value가 null이 아닌 경우,
			                                                      그 value를 포함하는 Optional를 리턴하고 null의 경우는 Optional의 empty 메소드로 생성되는 Optional를 리턴한다.  
			  empty()
			  ifPresent(Consumer<? super T> consumer) : Optional값을 포함하고 있는 경우 consumer 작업을 수행하고 Optional가 Empty의 경우는 아무것도 하지 않는다.
			  reduce(BinaryOperator<T> accumulator)  :  accumulator  처리 할  BinaryOperator결과와 요소을 사용하여  처리를 반복하고 처리 결과를  optional로 리턴한다. 
														 만일 요소가 없는 등의 결과가 없는 경우는 empty 의  optional를 리턴한다. 
			  T reduce (T identifier,BinaryOperatorl <T>accumulator) 
			  				: 처음 설정 값으로 제 1 인수에 T를 설정하여 T를 첫 번째 값으로 BinaryOperator 처리를 반복하고, 그 결과를 T로 리턴.
	  						  Stream에 요소가 없는 경우는 T의 identifier 값을 리턴 한다
			  U reduce (U identifier,BinaryFunction <U? super T, U>accumulator, BinaryOperator <U>combiner)   
			                :  stream 가지는 형태와 결과로 반환하는 형식이 다른 경우에 사용하는 reduce 메소드. 
							      제 1 인수를 첫 번째 값으로 U를 받고 BinaryFunction에서 Stream 요소 T를 받은 U를 사용하여 처리하고,
	 					               제 1 인수와 같은 U의 형태로 변환하여 결과를 리턴한다. 
	 					              병렬 처리의 경우, 제 3 인수 BinaryOperator 분산된 BinaryFunction 결과 U를 받고 결과를 정리해 생성하는 처리를 한다.
	 					       Stream에 요소가 없는 경우 제 1 인수의 값이   리턴된다.

8) java.util.Collectors(class) / java.util.stream.Collector (interface)	
	collect() : 
	 - stream에서 수행한 작업 결과를 수집하고 싶을 때 사용, 수집된 데이터가 Collector로 변환한다.
	   stream요소로 추출했을 경우 java.util.Collection으로 상태를 변경 할 수 있다.
	            
	 - collect() 메소드는 java.util.stream.Collector 인터페이스를 매개인자로 가진 것과
	 - accumulator,combinere 등 3개의 인수를 가진 overload 메소드가 존재한다.
	 - Collectors는 final 클래스로 모든 메소드가 static으로 되어 있고 리턴 값이 Collector 인터페이스로 리턴된다.
	 - collector 인터페이스를 매개인자로 가진 것은 java.util.Collectors 클래스의 메소드를 사용해서
	    List와 Map등을 만들어서 사용하기 쉽고 3개의 매개인자를 가진 오버로드 된 메소드는 Collectors 클래스의
	         메소드로 해결하지 못할 떄 사용한다.

9) R collect(Collector collector) : Collector 인터페이스에 의해 stream 요소를 사용하여 생성된 결과를 리턴
   collect(Supplier <R> supplier,BiConsumer<R,?super T> accumulator,BiConsumer<R,R> combiner);	
       supplier 생성된 R을 두번째 매개인자 스트림 요소에서 리턴받은 값을 T로 받아 accumulator에서 R에 저장하고 모든 요소의 처리가 끝날 때 R로 리턴한다.

0개의 댓글

관련 채용 정보