17 Jun 2023 EffectiveJava
스트림은 처음 봐서는 이해하기 어려울 수 있다.
스트림은 그저 또하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임이기 때문이다. 스트림이 제공하는 표현력, 속도, 병렬성을 얻으려면 API는 말할 것도 없고 이 패러다임 까지 함께 받아들어야 한다.
스트림 패러다임
스트림 패러다임의 핵심은 계산을 일련의 변환(transformations)으로 재구성 하는 부분이다....
13 Jun 2023 EffectiveJava
스트림 API는 다량의 데이터 처리 작업(순차 또는 병령)을 돕고자 자바8에 추가된 기능이다.
Stream API
스트림 API가 제공하는 추상 개념 중 핵심은 두가지이다.
- 스트림(stream)은 데이터 원소의 유한 혹은 무한 시퀀스(sequence)를 뜻한다.
- 스트림 파이프라인(stream pipeline)은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다.
스트림은 대표적으로...
10 Jun 2023 EffectiveJava
자바가 람다를 지원하면서 API를 작성하는 모범 사례도 템플릿 메서드 패턴에서 정적 팩터리나 생성자를 제공하는 형태로 많이 변화했다.
위의 내용을 풀어 말하자면, 함수 객체를 매개변수로 받는 생성자와 메서드를 더 많이 많들어야 한다는 것이다. 이때 함수형 매개변수 타입을 올바르게 선택하도록 해야한다.
함수형 매개변수 타입
예를 들어...
20 May 2023 EffectiveJava
람다가 익명 클래스보다 나은 점 중에서 가장 큰 특징은 간결함이다.
하지만 메서드 참조(method reference)를 사용하면 함수 객체를 람다보다 더 간결하게 만들어 줄 수 있다.
간단하게 예시를 들어보자.
map.merge(key, 1, (count,...
20 May 2023 EffectiveJava
자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스의 인스턴스를 함수객체(function Object)라고 하여 , 특정 함수나 동작을 나타내는 데 썻다.
JDK1.1 등장 이후 함수객체를 만드는 주요 수단은 익명 클래스가 되었고, 다음과 같은 예시로 쓰였다.