독서(Reading)/오늘의 책(Today's book)

(Java/자바) 모던 자바 인 액션 chapter 1, 4(2022.10.10)

Chaany 2022. 10. 10.
728x90

 

 

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. 스트림 활용

728x90

댓글