독서 정리 - 모던 자바 인 액션

1 minute read

모던 자바 인 액션

[1장] 자바 8, 9, 10, 11: 무슨 일이 일어나고 있는가?


1.1 자바의 진화과정

자바 8은 멀티코어 프로세스의 쉬운 활용과 간결한 코드를 기반으로 stream API, 람다와 메서드 참조, 인터페이스의 디폴트 메서드를 지원한다.
스트림을 사용하면 에러를 자주 일으키고 멀티코어 cpu보다 비싼 syncronized가 불필요하다.

1.2 자바가 변하는 이유

멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해 빅데이터를 효과적으로 처리할 필요성이 커지자 자바 8은 멀티코어 병렬성이 강화되었다.

  1. 스트림 처리
    stream API는 우리가 하려는 작업을 고수준으로 추상화해서 일련의 스트림으로 처리할 수 있어 복잡한 작업을 사용하지 않으면서 공짜로 병렬성을 얻을 수 있다는 장점이 있다.
  2. 동작 파라미터화
    메서드를 다른 메서드의 인수로 넘겨주는 기능 제공
  3. 병렬성과 공유 가변 데이터
    다른 코드와 동시에 실행하더라도 안전하게 실행할 수 있으려면 공유된 가변 데이터에 접근하지 않아야 함

1.3 자바 함수

프로그래밍 언어의 핵심은 값을 바꾸는 것에 있는데 자바 프로그래밍 언어의 메서드, 클래스 같은 값의 구조체가 값을 표현하는데 도움이 되지만 자유롭게 전달할 수는 없다. 이때 일급 컬렉션으로 만들어주는 방법을 생각한 것이다.

  1. 메서드와 람다를 일급 시민으로
    • predicate란? 인수로 값을 받아 boolean으로 반환하는 함수
  2. 메서드 전달에서 람다로

1.4 스트림

for-each루프: 외부 반복, stream: 내부 반복

  1. 멀티스레딩
    stream API로 멀티코어 활용 어려움, 컬렉션을 처리하면 발생하는 모호함과 반복적인 코드 문제 해결
    공유되지 않은 가변 상태의 의미는 프로그램이 실행되는 동안 컴포넌트 간에 상호작용이 일어나지 않음을 의미

1.5 디폴트 메서드와 자바 모듈

jar 파일을 제공하는 것 대신 패키지 모음을 포함하는 모듈 정의할 수 있도록 제공
디폴트 메서드 지원: 구현하지 않아도 되는 메서드를 인터페이스로 추가할 수 있는 기능을 제공하는 것이다. 메서드 본문은 클래스 구현이 아니라 인터페이스의 일부로 포함되는 것