chapter 1. 자바 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
- 메서드 참조 : ::('이 메서드를 값으로 사용하라')
- 자바 8부터는 메서드가 이급 값이 아닌 일급 값에 해당한다.
- 프레디케이트(predicate) : 인수로 값을 받아 true or false 값을 반환하는 함수
- 익명함수/람다를 통해 일회성 메서드 정의 오버헤드를 줄일 수 있다.
- 외부 반복 : for-each 루프를 이용해서 각 요소를 반복하면서 작업을 수행한다.
- 내부 반복 : 스트림 API에서 라이브러리 내부에서 모든 데이터가 처리된다.
- 컬렉션 : 어떻게 데이터를 저장하고 접근할지에 중점
- 스트림 : 스트림 내의 요소를 쉽게 병렬로 처리할 수 있는 환경을 제공
-> 컬렉션을 필터링할 수 있는 가장 빠른 방법은 컬렉션을 스트림으로 바꾸고, 병렬로 처리한 다음에, 리스트로 다시 복원하는 것
- 함수형 프로그래밍 : 함수를 일급값으로 사용한다 + 프로그램이 실행되는 동안 컴포넌트 간에 상호작용이 일어나지 않는다.
- 디폴트 메서드 : 인터페이스를 쉽게 바꿀 수 있도록 함 - 메서드 본문은 클래스 구현이 아니라 인터페이스의 일부로 포함됨
- Optional<T> : NullPointer Exception을 피할 수 있도록 함
(찾아볼 개념)
- 가변 공유 객체
- 구조적 패턴 매칭 기법
- 대규모 컴포넌트 기반 프로그래밍
chapter 4. 스트림
- 고수준 빌딩 블록 : filter, sorted, map, collect
- 구아바 : 멀티매비 멀티셋 컨테이너 클래스 제공(아파치 공통 컬렉션도 비슷)
- 람다제이 : 선언형으로 컬렉션을 제어하는 유틸리티 제공
- 자바 8의 스트림 특징
- 선언형 : 더 간결하고 가독성이 좋아짐
- 조립가능 : 유연성이 좋아짐
- 병렬화 : 성능이 좋아짐
- 스트림(Stream)
- 정의
- 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소
- 연속된 요소 : 컬렉션의 주제는 데이터, 스트림의 주제는 계산
- 소스 : 컬렉션, 배열, I/O 자원 등의 데이터 제공 소스로부터 데이터를 소비함, 데이터 제공 소스의 순서를 그대로 유지
- 데이터 처리 연산 : 함수형 프로그래밍 언어에서 일반적으로 지원하는 연산, 데이터 베이스와 비슷한 연산을 지원(filter, map, reduce, finde, match, sort 등), 스트림 연산은 순차적으로 또는 병렬로 실행할 수 있음
- 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소
- 중요 특징
- 파이프라이닝 : 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환함
- 내부 반복
- 반복자를 이용하여 명시적으로 반복하는 컬렉션과 달리 스트림은 내부 반복을 지원함
- 작업을 투명하게 병렬로 처리하거나 더 최적화된 다양한 순서로 처리할 수 있음
- 병렬성을 스스로 관리할 필요 없이 데이터 표현과 하드웨어를 활용한 병렬성 구현을 자동으로 선택함
- 컬렉션과의 차이점
- 요청할 때만 요소를 계산하는 고정된 자료구조(스트림에 요소를 추가하거나 스트림에서 요소를 제거할 수 없음)
- 게으른 생성 : 필요할 때만 값을 계산함
- 시간적으로 흩어진 값의 집합
- 딱 한 번만 탐색할 수 있음
- limit 연산 and 쇼트서킷
- 루프 퓨전(loop fusion)
chapter 4. 정리
- 스트림은 소스에서 추출된 연속 요소로, 데이터 처리 연산을 지원한다.
- 스트림은 내부 반복을 지원한다. 내부 반복은 filter, map, sorted 등의 연산으로 반복을 추상화한다.
- 스트림에는 중간 연산과 최종 연산이 있다.
- 중간 연산은 filter와 map처럼 스트림을 반환하면서 다른 연산과 연결되는 연산이다. 중간 연산을 이용해서 파이프라인을 구성할 수 있지만 중간 연산으로는 어떤 결과도 생성할 수 없다.
- forEach나 count처럼 스트림 파이프라인을 처리해서 스틀미이 아닌 결과를 반환하는 연산을 최종연산이라고 한다.
- 스트림의 요소는 요청할 때 게으르게 계산된다.
(찾아볼 개념)
- 멀티코어 아키텍처
To be continued... chapter 5. 스트림 활용
'독서(Reading) > 오늘의 책(Today's book)' 카테고리의 다른 글
클린코드 - 로버트 C.마틴 / 박재호,이해영 옮김 (0) | 2022.09.24 |
---|---|
2022년 7월 2주차 SQL 코딩의 기술(pp.118 ~ 175) (0) | 2022.07.14 |
2022년 7월 1주차 SQL 코딩의 기술 (0) | 2022.07.05 |
2022년 7월 1주차 나는 LINE개발자입니다 (0) | 2022.07.03 |
2022년 7월 1주차 면접을 위한 CS 전공지식 노트 - SECTION 2.2 (0) | 2022.07.03 |
댓글