-
챕터[21] 결론 그리고 자바의 미래모던자바인액션 2020. 10. 29. 15:41
서론
자바 8기능
자바 8이후 변경사항
동작 파라미터화(람다와 메서드 참조)
-
메서드로 전달되는 값은 Function<T, R>, Predicate<T>, BiFunction<T, U, R> 등의 형식을 가지며, 메서드를 수신한 코드에서는 apply, test 등의 메서드로 코드를 실행할 수 있다.
-
람다는 자바8에서의 추가된 가장 혁신적인 기능이다.
스트림 API (Java8)
-
컬렉션의 n번 탐색하여 결과를 찾아내는 연산을 스트림을 API의 파이프라이닝을 통하여 한번의 게으른 연산으로 값을 찾을 수 있다.
-
parallel 메서드로 인하여 스트림을 병렬로 처리할 수 있다.
-
내부반복, 외부반복, 부작용 없는 연산, 람다와 메서드 참조로 파라미터화된 메서드, 함수형 개념이 핵심이다.
CompletableFuture 클래스 (Java8)
- Future 인터페이스 제공(Java 5)
- 여러 작업이 동시에 실행 될 수 있도록 다른 스레드나 코어로 작업을 할당할 수 있다.(멀티코어)
- 다른 작업의 결과를 기다리며 호출하여 값을 가져올 수 있다.
- 불필요한 코드를 피할 수 있다.
- Future와 관련한 공통 디자인 패턴을 함수형 프로그래밍으로 간결하게 표현이 가능하다.
- thenCompose, thenCombine, allOf
- Future와 관련한 공통 디자인 패턴을 함수형 프로그래밍으로 간결하게 표현이 가능하다.
Optional (Java8)
-
NullPointException 발생을 최소화 할 수 있다.
-
값이 없는 상황일 경우 다른 행동을 추가할 수 있다.
-
map, filter, ifPresent, orElse, otThrown 등
-
Flow API (Java9)
-
리액티브 스트림과 리액티브 당김 기반 역압력 프로토콜 표준화
-
호환성을 위한 인터페이스 추가
-
Publisher, Subscriber, Subscription, Processor
-
디폴트 메서드 (Java8)
Java8 이전에는 인터페이스에서의 메서드 시그니처만 정의했다. 하지만 디폴트 메서드 덕분에 인터페이스 설계자는 메서드의 기본 구현을 제공할 수 있게 되었다.
자바 9 모듈 시스템
모듈화는 다루기 어렵지만 미래 장기적으로 생각 시 추가되면 유지보수면에서 이득을 취할 수 있다.
-
강화 캡슐화 : 자바 모듈 시스템은 특정 패키지만 노출한 다음 각 모듈에서 공개할 부분과 내부 구현의 영역 접근을 분리할 수 있다.
-
보안성 개선 : 사용자가 모듈의 특정 부분을 사용할 수 없도록 함으로 해커가 보안 제어를 뚫기가 어려워졌다.
-
성능 개선 : 클래스가 런타임이 로드된 다른 클래스를 참조하는 상황보다는 적은 수 의 컴포넌트를 참조할 때 최적화 기술이 더 효과를 방휘한다.
-
확장성 : 자바 모듈 시스템은 자바 SE 플랫폼을 작은 부분으로 나눔으로 실행중인 애플리케이션에서 필요한 부분만 사용할 수 있다.
자바 10 지역 변수형 추론
-
형식을 생략한다.
-
컴파일러가 생략된 형식을 추론한다.
-
-
Java 10에서는 초기값이 없을 때는 var을 사용할 수 없다.
@Test public void genericParam() { // 제네릭의 형식의 파라미터 생략가능 // Map<String, List<String>> myMap = new HashMap<String, List<String>>(); Map<String, List<String>> myMap = new HashMap<>(); }
자바의 미래
자바에서는 제네릭의 서브형식을 와일드카드로 지정할 수 있는 유연성을 허용한다.
@Test public void genericWildCard() { // 호환되지 않는 형식 // List<Number> numbers = new ArrayList<Integer>(); List<? extends Number> numbers = new ArrayList<Integer>(); }
자바의 변경사항 (8~) : okky.kr/article/802815
'모던자바인액션' 카테고리의 다른 글
챕터[20] OOP와 FP의 조화 : 자바와 스칼라 비교 (0) 2020.10.22 챕터[18] 함수형 관점으로 생각하기 (0) 2020.10.22 챕터[17] 리엑티브 프로그래밍 (0) 2020.10.22 챕터[16] 안정적 비동기 프로그래밍 (0) 2020.10.21 챕터[15] CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 (0) 2020.10.21 -