notepad

자바 8, 9, 10, 11 무슨 일이 일어나고 있는가? 본문

JAVA/모던자바인액션

자바 8, 9, 10, 11 무슨 일이 일어나고 있는가?

likewise_ 2020. 5. 27. 15:13

해당 포스팅은 '모던 자바 인 액션'(라울-게이브리얼 우르마 외 2인 저) 책의 내용을 학습을 위해 정리한 내용입니다.

1. Goal

  • 전반적인 자바8 이 후의 변화에 대해서 간략하게 알아본다.
  • 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 자바8의 추구를 이해한다.

2. 키워드

동작파라미터화, 병렬성, 비공유가변데이터, 스트림, 메서드참조, 람다,
인터페이스의_디폴트메서드, 함수형프로그래밍, 모듈, 일급시민(일급값)
프레디케이트, 제네릭, 비지터 패턴

3. 자바는 왜 변화하는걸까?

  1. 프로그램 언어 생태계의 변화와 멀티코어 CPU 대중화와 같은 하드웨어적 변화
    • 변화에 따라 빅데이터와 같은 도전에 직면하면서, 병렬 프로세싱을 활용한 효과적인 데이터 처리가 필요한데, 지금까지의 자바로는 충분히 대응 할 수 없었다.
    • 지금까지 대부분의 자바 프로그램은 코어 중 하나만을 사용했다.
  1. 코어 활용을 위한 스레드 사용은 관리가 어렵고 많은 문제가 발생할 수 있다.
    • 자바8의 스트림API, 자바9의 리액티브 프로그래밍(병렬실행기법) 지원 추가
  1. 언어는 하드웨어/프로그래머 기대의 변화에 부응하는 방향으로 변화해야하기 때문

4. 자바8이 어떻게 강력한 프로그래밍 도구가 될 수 있을까?

  1. 스트림 처리
    • 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
      • 이론적으로 프로그램은 입력 스트림에서 데이터를 한개씩 읽어 들이며 출력 스트림으로 데이터를 한개씩 기록한다.
      • 스트림 API는의 핵심은 마치 데이터베이스의 질의처럼 작업을 고수준으로 추상화하여 일련의 스트림으로 처리할 수 있는 것. 스트림 파이프라인을 이용해 여러 코어에 입력을 쉽게 할당할 수 있는것이다. (공짜 병렬성을 얻을 수있다)
  1. 동작 파라미터화
    • 메서드 내부적으로 다양한 동작을 수행할 수 있도록 코드를 메서드 인수로 전달하는 기법
  1. 병렬성과 공유 가변 데이터
    • 스트림 메서드로 전달되는 코드/ 동시에 실행하더라도 안전하게 실행하려면 공유된 가변 데이터에 접근하지 않아야한다.

5. 주요 추가 내용

  1. 메서드 참조
    • 디렉터리에서 모든 숨겨진 파일을 필터링 한다고 가정하자.
      • 메서드 참조 사용시 함수를 직접 값으로 전달하여 메서드를 1급 시민으로 활용한다.
      • 1급시민은 값을 전달 할 수 있는 구조체를 말한다.
      • ‘::’ 는 메서드를 값으로 사용하라는 의미
        File[] hiddenFiles = new File(“.”).listFiles(File::isHidden);
  1. 람다(익명함수)

    • 한 번만 사용할 메서드는 따로 정의를 구현할 필요가 없기 때문에 이름이 없는 익명 함수를 통해서 1급 값으로 취급할 수 있다. (자세한 내용은 3장에서 학습한다.)

        (Apple a) -> a.getWeight() > 150);  ```   
  1. 스트림 API
    • 스트림API는 라이브러리 내부 반복으로 데이터를 처리한다.
    • 조건에 따라 데이터를 필터링/추출/그룹화하는 기능을 제공한다.
    • 자바 병렬성과 공유되지 않은 가변 상태를 가진다. (안전한 병렬 처리)
      • 두 개의 CPU를 가진 환경에서 리스트를 필터링 한다고 가정하자.
        (1) 포킹 단계 : 큰 스트림을 병렬로 처리할 수 있도록 작은 스트림으로 분할
        (2) 필터 : 각 CPU는 자신이 맡은 스트림을 처리
        (3) 마지막으로 하나의 CPU가 처리 결과를 정리
  1. 디폴트 메서드와 자바 모듈
    • 구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가할 수 있는 기능
    • 인터페이스에 default 키워드 지원

6. 마무리

앞으로 학습하게 될 내용을 간략하게 둘러봤다. 상세한 내용은 앞으로 계속 학습해나가보자.

  • 함수는 일급값이다. 메서드참조와 람다를 통해 메서드를 함수형 값으로 넘겨 줄 수 있다.

'JAVA > 모던자바인액션' 카테고리의 다른 글

CHAPTER 2. 동작 파라미터화 코드 전달하기  (0) 2020.05.28
Comments