Modern Java in Action - 1

NuJey·2024년 12월 9일
0

1.1 역사의 흐름은 무엇인가 ?

자바 8

  • 자바의 가장 큰 변화는 자바 8에서 일어났다.
  • 자바8을 이용하면 자연어에 더 가깝게 간단한 방식으로 코드 구현이 가능하다.
  • 단일코어 -> 멀티코어를 사용할 수 있도록 변화
  • 스트림 API
  • 메서드에 코드를 전달하는 기법
  • 인터페이스의 디폴트 메서드

자바 1.0

  • 스레드와 락, 메모리 모델 지원

자바 5

  • 스레드 풀
  • 병렬 실행 컬렉션

자바 7

  • 포크/조인 프레임워크

자바 9

  • 리액티브 프로그래밍 지원

1.2 왜 아직도 자바는 변화하는가 ?

  • 자바는 처음 부터 스레드와 락을 이용한 소소한 동시성도 지원
  • 코드를 jvm 바이트 코드로 컴파일하는 특징 때문에 자바는 인터넷 애플릿 프로그램의 주요 언어가 되었다.
    - 모든 브라우저에서 가상 머신 코드를 지원

스트림처리

  • 스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
  • 어떤 프로그램의 출력 스트림은 다른 프로그램의 입력 스트림이 될 수 있다.

동작파라미터화로 메서드에 코드 전달하기

  • 자바 8에 추가된 두 번째 프로그램 개념은 코드 일부를 API로 전달하는 기능이다.

병렬성과 공유가변 데이터

  • 자바 8 스트림을 이용하면 기존의 자바 스레드 API보다 쉽게 병렬성을 활용할 수 있다.
    - synchronized를 사용하면 생각보다 훨씬 더 비싼 대가를 치러야 할 수 있음.
  • 공유되지 않는 가변 데이터, 메서드, 함수 코드를 다른 메서드로 전달하는 두 가지 기능은 함수형 프로그래밍의 핵심

1.3 자바 함수

  • 프로그램 언어의 핵심은 값을 바꾸는 것.
  • 값을 일급 값이라고 부른다.
    - 전달 할 수 없는 구조체는 이급 시민.
    • 값은 모두 일급 자바 시민이지만 메서드, 클래스 등의 이급 자바 시민에 해당한다.
  • 런타임에 메서드를 전달할 수 있다면, 즉 메서드를 일급 시민으로 만들면 프로그래밍에 유용하게 활용이 가능하다.

메서드와 람다를 일급 시민으로.

  • 자바 8에는 메서드 참조라는 기능이 소개 된다.
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
// isHidden이라는 함수는 준비되어 있으므로 자바 8의 메서드 참조 ::를 사용하여 직접 전달 가능

람다 : 익명함수

  • 자바 8에서는 메서드를 일급값으로 취급할 뿐 아니라 람다를 포함하여 함수도 값으로 취급할 수 있다.
  • 한 번만 사용할 메서드는 따로 정의를 구현할 필요가 없다.

스트림

  • 모든 자바 애플리케이션은 컬렉션을 만들고 활용한다.
  • for-each 루프를 이용해서 각 요소를 반복하면서 작업을 수행하는 방식은 외부 반복으로 직접 처리해야 한다.
  • 스트림 API에서는 라이브러리 내부에서 모든 데이터가 처리 되며 내부 반복이라고 한다.

멀티스레딩

  • 자바 8은 스트림 API로 컬렉션을 처리하면서 발생하는 모호함과 반복적인 코드 문제 그리고 멀티 코어 활용 어려움이라는 두가지 문제를 모두 해결한다.

디폴트 메서드와 자바 모듈

  • 자바 9의 모듈 시스템은 모듈을 정의하는 문법을 제공하므로 이를 이용해 패키지 모음을 포함하는 모듈을 정의할 수 있다.
  • 자바 8에서는 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 지원한다.

0개의 댓글