티스토리 뷰

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장에서 정리
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday