모던 자바 인 액션 Chapter. 1 - Java 8-11에서의 변화 요약

2024. 6. 30. 10:25·기술 학습/모던 자바 인 액션

Chapter. 1 - Java 8-11에서의 변화 요약

1. 자바가 멀티코어 병렬성을 더 쉽게 이용할 수 있도록 진화한 과정과 개념

자바 8 설계의 밑바탕을 이루는 3가지 프로그래밍 개념

  • 스트림 처리
    • 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임
    • 스트림 API는 파이프라인을 만드는데 필요한 많은 메서드를 제공
    • 4~7장에서 정리
  • 메서드에 코드 전달 - 동작 파리미터화(behavior parameterization)
    • 연산의 동작을 매개변수화하여 코드로 전달할 수 있다
    • 특정 정렬 동작을 코드로 전달받아서 처리하는 개념
    • 2~4장에서 정리
  • 병렬성을 공짜로 얻을 수 있다
    • 공유되지 않는 가변 데이터, 메서드, 함수 코드를 다른 메서드로 전달하는 두가지 기능은
    • 함수형 프로그래밍* 패러다임의 핵심적인 사항
    • 18~19장에서 정리

2. 자바 8에서 제공하는 코드를 메서드로 전달하는 기법이 어떻게 강력한 프로그래밍 도구가 될 수 있는지 이유

메서드와 람다를 일급 시민으로

  • 메서드 참조 (method reference)
    • 함수가 일급 객체가 되기 전까지는 함수를 매개변수로 전달할 수 없었다. 따라서 어떤 함수를 적용하고자 하면 인스턴스화를 통해 생성하여 전달해줘야 했다.
    • 자바8에서는 :: (메서드 참조) 기호를 통해 함수를 바로 전달할 수 있다.
    • 3장에서 정리
  • 람다 : 익명함수
    • 한번만 사용하는 함수를 매번 정의하여 전달하는것은 귀찮은 일인데 람다를 통해 전달하는 것도 가능하다.
    • (Apple a) → GREEN.equls(a.getColor()) 와 같은 람다(익명함수)를 만들어서 전달할 수 있다.

3. 스트림 API (병렬형 데이터를 표현하고 데이터를 병렬로 처리할 수 있음을 유연하게 보여주는)가 왜 강력하고 새로운 프로그래밍 도구인지 이유

스트림 API

  • `stream().filter(…).collect(groupingBy(…)` ← 순차 처리 방식

  • 스트림 API에서는 루프를 신경쓰지 않아도 된다. 라이브러리 내부에서 모든 데이터가 처리되기 때문. 이와 같은 반복을 내부 반복이라고 한다. (참고로, 기존 for 문 루프의 경우는 외부 반복)

  • 자바8에서는 멀티코어로 스트림 연산을 처리한다. (포킹 단계 - forking step)

    → 각 코어가 리스트를 쪼개서 정렬 연산을 처리하고 결과를 합침.

    • `parallelStream().filter(…).collect(groupingBy(…)` ← 병렬 처리 방식
  • 4~7장에서 정리

4. 디폴트 메서드라는 기능으로 인터페이스, 라이브러리의 간결성 유지 및 재컴파일을 줄이는데 어떻게 활용될 수 있는지 설명

Collection 인터페이스에서 지원하지 않는 stream, parallelStream을 Java8에서 제공하는 방법

  • 인터페이스에 새로운 메서드를 추가하면 이를 구현하는 모든 컬렉션은 해당 함수를 구현해야한다. 컬렉션 인터페이스를 구현한 모든 코드를 책임지는것은 사실상 불가능하다.

  • 이를 해결하고자 인터페이스 내부에 구현이 필요없는 default 메소드가 추가되었다. (default 키워드 신설)

    default void sort(…) { … }

  • 클래스는 여러 인터페이스를 구현할 수 있는데 그러면 다중 디폴트 메소드의 상속이 가능한건가?

    → 어느정도는 그렇다고 할 수 있다. 다이아몬드 상속문제는 9장에서 정리한다.

5. JVM을 구성하는 자바 및 기타 언어에서 함수형 프로그래밍이라는 존재가 어떤 영향을 미치는지 제시

NullPointerException을 피하는 방법 Optional 클래스 제공

  • null을 보는경우 예외가 발생하는데 이를 방지하는 Optional 클래스를 제공한다. 이는 값을 갖거나 갖이 않을 수 있는 컨테이너 객체이다.
  • 값이 있을때 없을 때 어떻게 처리할지 명시적으로 구현하는 메소드를 갖고있다.
  • 11장에서 정리
반응형
저작자표시 비영리 변경금지 (새창열림)

'기술 학습 > 모던 자바 인 액션' 카테고리의 다른 글

모던 자바 인 액션 Chapter. 5 - 스트림 활용 (5.1 ~ 5.4)  (1) 2024.08.04
모던 자바 인 액션 Chapter. 4 - 스트림 소개  (0) 2024.07.28
모던 자바 인 액션 Chapter. 3 - 람다표현식 (3.5 ~ 3.7)  (0) 2024.07.21
모던 자바 인 액션 Chapter. 3 - 람다표현식 (3.1 ~ 3.4)  (3) 2024.07.14
모던 자바 인 액션 Chapter. 2 - 동작 파리미터화(behavior parameterization) 코드 전달  (1) 2024.07.07
'기술 학습/모던 자바 인 액션' 카테고리의 다른 글
  • 모던 자바 인 액션 Chapter. 4 - 스트림 소개
  • 모던 자바 인 액션 Chapter. 3 - 람다표현식 (3.5 ~ 3.7)
  • 모던 자바 인 액션 Chapter. 3 - 람다표현식 (3.1 ~ 3.4)
  • 모던 자바 인 액션 Chapter. 2 - 동작 파리미터화(behavior parameterization) 코드 전달
구름뭉치
구름뭉치
구름의 개발일기장
    반응형
  • 구름뭉치
    구름 개발일기장
    구름뭉치
  • 전체
    오늘
    어제
    • ALL (284)
      • 프로젝트 (23)
        • 토스페이먼츠 PG 연동 시리즈 (12)
        • JWT 방식 인증&인가 시리즈 (6)
        • 스우미 웹 애플리케이션 프로젝트 (1)
        • 스프링부트 기본 보일러 플레이트 구축 시리즈 (2)
        • 마이크로서비스 아키텍쳐 시리즈 (1)
      • 스프링 (43)
        • 스프링부트 API 설계 정리 (8)
        • 스프링부트 RestAPI 프로젝트 (18)
        • 스프링부트 WebSocket 적용기 (3)
        • 스프링 JPA 정리 시리즈 (5)
        • 스프링 MVC (5)
        • 스프링 배치 (2)
        • 토비의 스프링 정리 (2)
      • 기술 학습 (29)
        • 아파치 카프카 (9)
        • 클린 코드 (4)
        • 디자인 패턴의 아름다움 (2)
        • 모던 자바 인 액션 (7)
        • JVM 스레드 딥다이브 (7)
      • Web (25)
        • 정리글 (20)
        • GraphQL 정리글 (2)
        • Jenkins 정리글 (3)
      • 취업 (6)
      • CS (77)
        • 네트워크 전공 수업 정리 (11)
        • OSI 7계층 정리 (12)
        • 운영체제 정리 (19)
        • 데이터베이스 정리 (5)
        • MySql 정리 (17)
        • GoF의 Design Pattern 정리 (12)
      • 알고리즘 (70)
        • 백준 (56)
        • 프로그래머스 (12)
        • 알고리즘 정리본 (1)
      • 기초 지식 정리 (2)
      • 일상 (8)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    동유럽
    mx master s3 for mac
    부다페스트
    키보드 손목 받침대
    마우스
    레이저
    류블라냐
    마우스 패드
    크로아티아
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
구름뭉치
모던 자바 인 액션 Chapter. 1 - Java 8-11에서의 변화 요약
상단으로

티스토리툴바