Chapter 08. 스트림을 활용한 병렬 데이터 처리
·
스터디/함수형 프로그래밍 with 자바
스트림을 활용한 병렬 데이터 처리8.1 동시성 vs 병렬성동시성(concurrency)은 여러 작업이 중복되는 시간 동안 한정된 리소스에 대한 경쟁을 하면서 실행되는 것을 의미합니다.병렬성(parallelism)은 중첩된 작업들을 관리하는 것이 아니라 이 작업들이 동시에 실행되는 것에 중점을 준다.즉 동시성은 동시에 실행 되는 것처럼 보이는 것일 뿐이며, 병렬성은 실제로 동시에 작업하는 것을 뜻한다.8.2 병렬 함수 파이프라인으로써의 스트림병렬 스트림은 재귀적 분해(Recursive Decomposition) 개념을 사용합니다. 이는 요소를 Spliterator를 사용하여 분할하고 요소의 덩어리를 병렬로 처리함으로써 데이터 소스를 분할하고 정복하는 것을 의미합니다.8.4 병렬 스트림 활용 시기와 주의할 ..
Chapter 07. 스트림 사용하기
·
스터디/함수형 프로그래밍 with 자바
7.1 원시 스트림스트림과 함께 원시 타입을 사용하는 데는 두가지 옵션이 존재오토박싱원시 타입의 값을 객체로 변환할 때 오버헤드 발생null 값의 존재 가능성스트림의 특화된 변형IntStream, LongStream, DoubleStream 등 원시 타입 전용 스트림public class PrimitiveStreamExample { public static void main(String[] args) { IntStream intStream = IntStream.range(1, 10); intStream.forEach(System.out::print); }}/*---123456789 */7.2 반복 스트림세밀한 제어가 필요하다면 스트림 타입 및 원시 타입 변형에서 사용 ..
Chapter 06. 스트림 (Stream)
·
스터디/함수형 프로그래밍 with 자바
6. 스트림을 이용한 데이터 처리자바 8에서 도입된 스트림 API는 데이터 처리에 대해 선언적이고 지연 평가된 접근법을 제공한다.6.1 반복을 통한 데이터 처리외부 반복FOR-LOOP명확한 단점은 반복 기반 루프에 필요한 보일러 플레이트 코드가 많다.루프의 바디에는 continue와 break의 형태로 반복 과정에 대한 의사 결정 및 여러 문장까지 포함할 수 있다.연속적인 순회 과정이 필요하며, 병렬 데이터 처리가 필요한 경우 전체 루프 재작성해야 하며, 그 과정에서 ConcurrentModificationException과 같은 복잡한 문제를 해결해야한다.public class ExternalIteration { public static void main(String[] args) { ..
Chapter 05. 레코드 (Record)
·
스터디/함수형 프로그래밍 with 자바
5. 레코드5.1 데이터 집계 유형데이터 집계는 다양한 소스로부터 데이터를 수집하고 의도한 목적에 부합하도록 표현하는 과정튜플튜플은 요소의 유한하며 순서가 있는 집합이며 여러 값 또는 객체를 모은 자료 구조종류구조적 튜플: 요소들의 순서에만 의존하므로 인덱스를 통해서만 접근이 가능명목상 튜플: 데이터에 접근하기 위한 방법으로 인덱스를 사용하지 않고 컴포넌트명을 사용public class TupleExample { public static void main(String[] args) { Map.Entry person = new AbstractMap.SimpleEntry("Pli", 30); System.out.println("이름: " + person.getKey()); System.ou..
Chapter 04. 불변성
·
스터디/함수형 프로그래밍 with 자바
4. 불변성4.1 객체지향 프로그래밍의 가변성과 구조일반적으로 setter 메서드를 사용하여 상태를 변화기존 자료 구조의 변경된 내용이 해당 상태를 업데이트하며, 참조하는 다른 모든 사용자에게도 영향을 미침.가변 상태는 복잡성과 불확실성을 유발가변 상태를 공유하는 것은 공유된 상태에 액세스하는 컴포넌트의 수명을 포함하여 복잡성을 증가시킴동시성 프로그래밍은 공유된 상태의 복잡성에 영향을 받으며 많은 문제가 가변성에서 발생@Setter@ToString@AllArgsConstructorpublic class Study { private String name; private LocalDate startDate; private int studyHours; public static void main(Stri..
Chapter 03. JDK의 함수형 인터페이스
·
스터디/함수형 프로그래밍 with 자바
3.1 네 가지 함수형 인터페이스Function: 인수를 받고 결과를 반환합니다.Consumer: 인수만 받고 결과를 반환하지 않습니다.Supplier: 인수를 받지 않고 결과를 반환합니다.Predicate: 인수를 받아서 표현식에 대해 테스트하고 boolean 값을 결과로 반환합니다.Function하나의 입력과 출력을 가진 전통적인 함수Function은 하나의 입력값을 받아 하나의 결괏값을 반환한다.@FunctionalInterface public interface Function { R apply(T t); } public class FunctionExample { public static void main(String[] args) { Function intToStr..
Chapter 02. 자바 람다
·
스터디/함수형 프로그래밍 with 자바
2.1 자바 람다란?람다 표현식은 자바 코드가 한 줄 또는 블록 단위로 이루어져 있으며 0개 이상의 매개변수를 갖고 값을 변환할 수 있다.public class BasicLambda { public static void main(String[] args) { Runnable greet = () -> System.out.println("Hello, Labmda!"); greet.run(); }}람다 문법매개변수메서드의 인수와 마찬가지로 쉼표로 구분합니다. 컴파일러가 매개변수의 타입을 추론할 수 있는 경우 매개변수의 타입을 생략할 수 있습니다.묵시적으로 타입이 지정된 매개변수와 명시적으로 타입이 지정된 매개변수를 혼용하는 것은 허용되지 않습니다.매개변수가 하나인 경우 괄호..
Chapter 01. 함수형 프로그래밍 소개
·
스터디/함수형 프로그래밍 with 자바
함수형 프로그래밍 소개어떤 것이 언어를 함수형으로 만드는가?프로그래밍 언어가 추상 함수(abstract function)을 생성하고 조합함으로써 논리 연산을 표현할 수 있을 때 함수형 언어로 간주.람다 대수를 구성하는 세가지 구성 요소- 추상화: 단일 입력을 받는 익명 함수, 람다를 의미- 응용: 값에 추상화가 적용되어 결과를 생성. 개발자의 관점에서는 함수나 메서드 호출을 의미.- 베타 축약: 추상화된 변수를 적용된 인수로 대체제어 흐름이나 알고리즘을 설명하지 않고, 연산의 논리를 선언적 문장으로 표현할 수 있다.함수형 프로그래밍은 불변성을 강조하며, 상태를 변경하는 대신 새로운 상태를 생성한다.문장이 아닌 표현식을 사용하여 결과와 프로그램이 작동하는 방식을 설명.무엇을 해야하는지가 아닌, 무엇을 원하..
코드플리
'스터디/함수형 프로그래밍 with 자바' 카테고리의 글 목록