Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Java8
- 프레디케이트
- es5
- 발음공부
- 일빵빵알파벳파닉스
- 메서드참조
- spring configuration
- 영속성
- 다시보기연습
- 나만재밌는이야기
- 스프링구성
- 동작파라미터화
- 생각
- 람다
- 잡담
- 1월의독서
- 일급함수
- ES6
- 모던자바인액션
- 영속성컨텍스트
- 달리기를말할때내가하고싶은이야기
- spring5receipe
- 객체지향생활체조원칙
- 스프링5레시피
- 엔티티매핑
- 클린코드
- JPA
- 제대로알기
- gulp
- a-d
Archives
- Today
- Total
notepad
자바 8, 9, 10, 11 무슨 일이 일어나고 있는가? 본문
해당 포스팅은 '모던 자바 인 액션'(라울-게이브리얼 우르마 외 2인 저) 책의 내용을 학습을 위해 정리한 내용입니다.
1. Goal
- 전반적인 자바8 이 후의 변화에 대해서 간략하게 알아본다.
- 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 자바8의 추구를 이해한다.
2. 키워드
동작파라미터화, 병렬성, 비공유가변데이터, 스트림, 메서드참조, 람다,
인터페이스의_디폴트메서드, 함수형프로그래밍, 모듈, 일급시민(일급값)
프레디케이트, 제네릭, 비지터 패턴
3. 자바는 왜 변화하는걸까?
- 프로그램 언어 생태계의 변화와 멀티코어 CPU 대중화와 같은 하드웨어적 변화
- 변화에 따라 빅데이터와 같은 도전에 직면하면서, 병렬 프로세싱을 활용한 효과적인 데이터 처리가 필요한데, 지금까지의 자바로는 충분히 대응 할 수 없었다.
- 지금까지 대부분의 자바 프로그램은 코어 중 하나만을 사용했다.
- 코어 활용을 위한 스레드 사용은 관리가 어렵고 많은 문제가 발생할 수 있다.
- 자바8의 스트림API, 자바9의 리액티브 프로그래밍(병렬실행기법) 지원 추가
- 언어는 하드웨어/프로그래머 기대의 변화에 부응하는 방향으로 변화해야하기 때문
4. 자바8이 어떻게 강력한 프로그래밍 도구가 될 수 있을까?
- 스트림 처리
- 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
- 이론적으로 프로그램은 입력 스트림에서 데이터를 한개씩 읽어 들이며 출력 스트림으로 데이터를 한개씩 기록한다.
- 스트림 API는의 핵심은 마치 데이터베이스의 질의처럼 작업을 고수준으로 추상화하여 일련의 스트림으로 처리할 수 있는 것. 스트림 파이프라인을 이용해 여러 코어에 입력을 쉽게 할당할 수 있는것이다. (공짜 병렬성을 얻을 수있다)
- 동작 파라미터화
- 메서드 내부적으로 다양한 동작을 수행할 수 있도록 코드를 메서드 인수로 전달하는 기법
- 병렬성과 공유 가변 데이터
- 스트림 메서드로 전달되는 코드/ 동시에 실행하더라도 안전하게 실행하려면 공유된 가변 데이터에 접근하지 않아야한다.
5. 주요 추가 내용
- 메서드 참조
- 디렉터리에서 모든 숨겨진 파일을 필터링 한다고 가정하자.
- 메서드 참조 사용시 함수를 직접 값으로 전달하여 메서드를 1급 시민으로 활용한다.
- 1급시민은 값을 전달 할 수 있는 구조체를 말한다.
- ‘::’ 는 메서드를 값으로 사용하라는 의미
File[] hiddenFiles = new File(“.”).listFiles(File::isHidden);
람다(익명함수)
한 번만 사용할 메서드는 따로 정의를 구현할 필요가 없기 때문에 이름이 없는 익명 함수를 통해서 1급 값으로 취급할 수 있다. (자세한 내용은 3장에서 학습한다.)
(Apple a) -> a.getWeight() > 150); ```
- 스트림 API
- 스트림API는 라이브러리 내부 반복으로 데이터를 처리한다.
- 조건에 따라 데이터를 필터링/추출/그룹화하는 기능을 제공한다.
- 자바 병렬성과 공유되지 않은 가변 상태를 가진다. (안전한 병렬 처리)
- 두 개의 CPU를 가진 환경에서 리스트를 필터링 한다고 가정하자.
(1) 포킹 단계 : 큰 스트림을 병렬로 처리할 수 있도록 작은 스트림으로 분할
(2) 필터 : 각 CPU는 자신이 맡은 스트림을 처리
(3) 마지막으로 하나의 CPU가 처리 결과를 정리
- 디폴트 메서드와 자바 모듈
- 구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가할 수 있는 기능
- 인터페이스에 default 키워드 지원
6. 마무리
앞으로 학습하게 될 내용을 간략하게 둘러봤다. 상세한 내용은 앞으로 계속 학습해나가보자.
- 함수는 일급값이다. 메서드참조와 람다를 통해 메서드를 함수형 값으로 넘겨 줄 수 있다.
'JAVA > 모던자바인액션' 카테고리의 다른 글
CHAPTER 2. 동작 파라미터화 코드 전달하기 (0) | 2020.05.28 |
---|
Comments