반응형
SMALL
동작 파라미터화(람다와 메서드 참조)
- 메서드로 전달되는 값은 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>();
}
반응형
LIST
'그룹 스터디 공부(IT 서적) > 모던 자바 인 액션' 카테고리의 다른 글
20.OOP와 FP의 조화:자바와 스칼라 비교 (0) | 2023.10.13 |
---|---|
19. 함수형 프로그래밍 기법 (0) | 2023.10.05 |
18 함수형 관점으로 생각하기 (0) | 2023.10.03 |
chapter 11 합성과 유연한 설계 (0) | 2023.09.18 |
chapter 16 CompletableFuture: 안정적 비동기 프로그래밍 (0) | 2023.09.13 |