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에서는 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 지원한다.