자바 8부터 획기적이고 생산성 있게 변했다.
- 컬렉션::메서드 문법으로 자연어처럼 사용가능
- 병렬 실행을 단순한 방식으로 접근가능
자바 9는 리액티브 병렬 프로그램을 지원
즉, 자바 8은 3가지 기술을 지원합니다.
- 스트림 API (함수형 프로그래밍)
메서드 참조와 람다 - 메서드에 코드를 전달 가능 (함수형 프로그래밍)
- 인터페이스의 디폴트 메서드
스트림을 이용하면 멀티코어 CPU를 이용하는 것보다 비용이 훨씬 비싼 키워드 synchronized를 사용하지 않아도 됩니다.
즉, 스레드를 사용하지 않고 공짜로 병렬성을 얻을 수 있습니다.
스트림
스트림은 한번에 한 개씩 만들어지는 연속적인 데이터 항목입니다.
즉, 어떤 프로그램의 출력스트림은 다른 프로그램의 입력스트림이 될 수 있습니다.조립라인
이라고 생각하면 편합니다.
java.util.stream\
패키지에 스트림API가 추가되었습니다.
동작 파라미터화 (메서드에 코드블록 전달)
A메서드를 B메서드의 파라미터로 보낼 수 있습니다.
병렬성과 공유 가변 데이터
보통 다른코드와 동시에 실행하더라도 안전하게 실행할 수 있는 코드를 만들려면공유된 가변 데이터
에 접근하지 않아야 한다.
이런 함수를 순수함수, 부작용 없는 함수, 상태 없는 함수라 부른다.
멀티 스레드에서 synchronized를 사용하면 순차적으로 실행되어야 하므로 병렬이라는 목적이 무마되고 비싼 대가가 있지만
스트림을 이용하면 쉽게 병렬성을 활용할 수 있다.
자바함수
자바 8에서는 이급 함수인 메서드, 클래스 같은 구조체를 일급함수로 바꿀 수 있는 기능을 추가했다.
이급 -> 일급 으로 바꾸는 기능은??
- 메서드 참조
Collection::메서드
: 이 메서드를 값으로 사용하라는 의미
- 람다
- 클래스나 메서드를 한 번만 사용하거나 클래스를 만들기 귀찮을 때
즉, 메서드 참조를 사용하지 않으려고 사용합니다.
- 클래스나 메서드를 한 번만 사용하거나 클래스를 만들기 귀찮을 때
일급함수
: 프로그램을 실행하는 동안 자유롭게 전달할 수 있는 구조체
일급함수 장점
중복되는 코드를 작성하지 않고 가독성있는 코드를 작성할 수 있습니다.
스트림
컬렉션을 처리하면서 발생하는 모호함과 반복적인 코드 문제,
멀티코어 활용 어려움 이라는 두 가지 문제를 모두 해결했습니다.
1. 내부반복
for 루프를 사용하지 않고 스트림 API 내부에서 모든 데이터가 처리됩니다.
즉, 외부 반복을하지 않고 내부반복을 사용합니다.
물론 가독성 또한 올라갑니다.
2. 병렬처리
스트림을사용한다면 for 문처럼 하나하나 접근하지 않고 병렬로 일처리가가능하여
빠르게 시간을 단축시킬 수 있습니다.
포킹단계
A CPU는 컬렉션의 앞쪽 B CPU는 컬렉션의 뒤쪽을 나눠서 처리하는 방식입니다.
디폴트 메서드와 자바 모듈
자바 8부터는 인터페이스 메서드를 지원
자바 9부터는 패키지 모음을 포함하는 모듈을 정의할 수 있습니다.
'Books > Modern Java In Action' 카테고리의 다른 글
[모던 자바 인 액션] Chapter5. 함수형 데이터 처리 (0) | 2023.07.31 |
---|---|
[모던 자바 인 액션] Chapter4. 스트림 vs 컬렉션 (0) | 2023.07.26 |
[모던 자바 인 액션] Chapter4. 스트림 소개 (0) | 2023.07.26 |
[모던 자바 인 액션] Chapter3. 람다 표현식 (0) | 2023.07.25 |
[모던 자바 인 액션] Chapter3. 동작파라미터화 코드 전달하기 (0) | 2023.07.22 |