티스토리 뷰
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) (0) | 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) 코드 전달 (0) | 2024.07.07 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday