본문 바로가기
그룹 스터디 공부(IT 서적)/모던 자바 인 액션

21 결론 그리고 자바의 미래

by hanyugyeong 2023. 10. 13.
반응형
SMALL

동작 파라미터화(람다와 메서드 참조)

  1. 메서드로 전달되는 값은 Function<T, R>, Predicate<T>, BiFunction<T, U, R> 등의 형식을 가지며, 메서드를 수신한 코드에서는 apply, test 등의 메서드로 코드를 실행할 수 있다.
  2. 람다는 자바8에서의 추가된 가장 혁신적인 기능이다.

스트림 API (Java8)

  1. 컬렉션의 n번 탐색하여 결과를 찾아내는 연산을 스트림을 API의 파이프라이닝을 통하여 한번의 게으른 연산으로 값을 찾을 수 있다.
  2. parallel 메서드로 인하여 스트림을 병렬로 처리할 수 있다.
  3. 내부반복, 외부반복, 부작용 없는 연산, 람다와 메서드 참조로 파라미터화된 메서드, 함수형 개념이 핵심이다.

CompletableFuture 클래스 (Java8)

  1. Future 인터페이스 제공(Java 5)
    1. 여러 작업이 동시에 실행 될 수 있도록 다른 스레드나 코어로 작업을 할당할 수 있다.(멀티코어)
    2. 다른 작업의 결과를 기다리며 호출하여 값을 가져올 수 있다.
  2. 불필요한 코드를 피할 수 있다.
    1. Future와 관련한 공통 디자인 패턴을 함수형 프로그래밍으로 간결하게 표현이 가능하다.
      1. thenCompose, thenCombine, allOf

Optional (Java8)

  1. NullPointException 발생을 최소화 할 수 있다.
  2. 값이 없는 상황일 경우 다른 행동을 추가할 수 있다.
    1. map, filter, ifPresent, orElse, otThrown 등 

Flow API (Java9)

  1. 리액티브 스트림과 리액티브 당김 기반 역압력 프로토콜 표준화
  2. 호환성을 위한 인터페이스 추가
    1. Publisher, Subscriber, Subscription, Processor

디폴트 메서드 (Java8)

Java8 이전에는 인터페이스에서의 메서드 시그니처만 정의했다. 하지만 디폴트 메서드 덕분에 인터페이스 설계자는 메서드의 기본 구현을 제공할 수 있게 되었다.

 

자바 9 모듈 시스템

모듈화는 다루기 어렵지만 미래 장기적으로 생각 시 추가되면 유지보수면에서 이득을 취할 수 있다.

  1. 강화 캡슐화 : 자바 모듈 시스템은 특정 패키지만 노출한 다음 각 모듈에서 공개할 부분과 내부 구현의 영역 접근을 분리할 수 있다.
  2. 보안성 개선 : 사용자가 모듈의 특정 부분을 사용할 수 없도록 함으로 해커가 보안 제어를 뚫기가 어려워졌다.
  3. 성능 개선 : 클래스가 런타임이 로드된 다른 클래스를 참조하는 상황보다는 적은 수 의 컴포넌트를 참조할 때 최적화 기술이 더 효과를 방휘한다.
  4. 확장성 : 자바 모듈 시스템은 자바 SE 플랫폼을 작은 부분으로 나눔으로 실행중인 애플리케이션에서 필요한 부분만 사용할 수 있다.

자바 10 지역 변수형 추론

  1. 형식을 생략한다.
    1. 컴파일러가 생략된 형식을 추론한다.
  2. 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