본문 바로가기

Programming Language 이해하기/Java 이해하기25

자바8 inAction - [7] 병렬데이터 처리와 성능 병렬 데이터 처리와 성능 병렬 스트림으로 데이터를 병렬 처리하기 병렬 스트림의 성능분석 포크/조인 프레임워크 Spliterator로 스트림 데이터 쪼개기 스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있다. 어떻게 이런 방법같은 일이 일어날 수 있는지, 더 나아가 자바7에 추가된 포크/조인 프레임워크와 내부적인 병렬 스트림 처리는 어떤 관계가 있는가? 우선 여러 청크를 병렬로 처리하기 전에 병렬 스트림이 요소를 여러 청크로 분활하는 방법과, 이 원리를 이해하지 못하면 의도치 않은 설명하기 어려운 결과가 발생할 수 있다. 따라서 커스텀 Spliterator를 직접 구현하면서 분할 과정을 우리가 원하는 방식으로 제어하는 방법도 설명한다. 병렬 스트림 parallelStream 을 호출하.. 2019. 8. 31.
자바8 inAction - [6] 스트림으로 데이터 수집하기 스트림으로 데이터 수집 Collectors 클래스로 컬렉션을 만들고 사용하기 하나의 값으로 데이터 스트림 리튜스하기 특별한 리듀싱 요약 연산 데이터 그룹화의 분할 자신만의 커스텀 컬렉션 개발 다양한 요소 누적 방식 Collector 인터페이스에 정의 미리 정의된 컬렉션 Collectors에서 제공하는 메서드의 기능은 크게 세 가지로 구분 할 수 있다. 스트림 요소를 하나의 값으로 리듀스하고 요약 요소 그룹화 요소 분할 리듀스과 요약 counting() long howManyDishs = menu.stream().collect(Collectors.counting()); long howManyDishs = menu.stream().count(); Collectors.maxBy , Collectors.minB.. 2019. 8. 31.
자바8 inAction - [5] 스트림 활용 - 스트림 제대로 알고 사용하기. 스트림 활용 필터링, 슬라이싱, 매칭 검색, 매칭, 리듀싱 특정 범위의 숫자와 같은 숫자 스트림 사용하기 다중 소스로부터 스트림 만들기 무한 스트림 여기서는 기본적인 filter, map 등의 기본연산은 생략하고, 조금 더 실용적인 스트림 활용만을 정리해보자. 두 개의 숫자 리스트가 있을 때 모든 숫자 쌍의 리스트를 반환하시오. 예를 들어 두 개의 리스트 [1,2,3]과 [3,4]가 주어지면 [(1,3), (1,4), (2,3), (2,4), (3,3), (3,4)] 를 반환 List num1 = Arrays.asList(1,2,3); List num2 = Arrays.asList(3,4); List pairs = num1.stream().flatMap(i -> num2.stream() .map(j ->.. 2019. 8. 31.
자바8 inAction - [4] 스트림 소개 - 스트림과 콜렉션의 차이는 무엇인가? 01. 스트림이란 무엇인가? 컬렉션은 만들고 처리하는 과정을 포함. 대부분의 작업에서 필수적인 요소. 그러나 우리는 여기서 컬렉션이 가지지 못한 2가지 단점을 이야기해볼 수 있다. SQL과 같은 질의를 할 수 있는가? 많은 요소를 포함하는 커다란 컬렉션은 어떻게 처리해야 될까? 이 두가지 단점을 해결하기 위해 스트림이 출연. 스트림이란, 선언형(즉, 데이터를 처리하는 임시 구현 코드 대신 질의로 표현할 수 있다.)으로 컬렉션 데이터를 처리할 수 있다. 또한, 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. import static java.util.Comparator.comparing; List lowCaloricDishesName = menu.stream(.. 2019. 8. 31.
자바8 inAction - [3] 람다 표현식 - 람다란 무엇인가? 3장. 람다 표현식 1 람다란 무엇인가? 람다 표현식 메서드로 전달할 수 있는 익명 함수를 단순화한 것. 익명 함수 전달 간결성 2 어디에, 어떻게 람다를 사용할까? 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있음. 함수형 인터페이스 => 정확히 하나의 추상 메서드를 지정하는 인터페이스 public interface Predicate { boolean test(T t); } 그외 public interface Callable { V call(); } 람다 표현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달 할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스로 취급(기술적으로 따지면 함수형 인터페이스를 concreate 구현한 클래스의 인스턴스) 할 수 있다. 함수 디스크럽터 .. 2019. 8. 31.