/////
Search
Duplicate
1️⃣

역사의 흐름은 무엇인가?

: 자바 역사상 가장 큰 변화가 자바 8 버전에서 일어났다.
: 다음은 사과 목록을 무게순으로 정렬하는 고전적인 코드다.
Collections.sort(inventory, new Comparator<Apple>() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } });
Java
복사
: 자바 8을 이용하면 자연어에 더 가깝게 간단한 방식으로 코드를 구현할 수 있다.
inventory.sort(comparing(Apple::getWeight));
Java
복사
: 멀티코어 CPU 대중화와 같은 하드웨어적인 변화가 자바 8에 영향을 미쳤다. 지금까지 대부분의 자바 프로그램은 코어 중 하나만을 사용했다. 나머지는 쓰지 않았다.
: 자바 8이 등장하기 이전에는 나머지 코어를 활용하려면 스레드를 사용하라했을 것이다. 하지만 스레드는 복잡하다.
: 자바는 이러한 병렬 실행 환경을 쉽게 관리하는 방향으로 진화하려 노력했다.
: 자바 1.0에서는 스레드와 락, 메모리 모델까지 지원했다. 당시로서는 최상의 선택이었을지도 모르지만, 전문가가 아닌 이상 이런 저수준의 기능을 활용하기는 쉬운 일이 아니었다.
: 자바 5에서는 스레드 풀, 병렬 실행 컬렉션 등 아주 강력한 도구를 도입했다.
: 자바 7에서는 병렬 실행에 도움을 줄 수 있는 포크/조인 프레임워크를 제공했지만 여전히 개발자들이 널리 활용하기는 쉽지 않았다.
: 자바 8에서는 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다. 하지만 세상에 공짜는 없듯, 새로운 기법들을 이용하려면 몇 가지 규칙을 지켜야 한다.
: 자바 9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원한다. 사용 가능한 상황은 한정적이지만 고성능 병렬 시스템에서 인기 있는 RxJava를 표준적인 방법으로 지원한다.
스트림 API
메서드에 코드를 전달하는 기법
인터페이스의 디폴트 메서드
: 자바 8은 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 두 가지 요구사항을 기반으로 한다.
: 자바 8은 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 Stream이라는 새로운 API를 제공한다.
: 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 구현하면, 구현에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작한다.
: 즉 스트림을 이용하면 에러를 자주 일으키며 멀티코어 CPU를 이용하는 것보다 비용이 훨씬 비싼 키워드인 synchronized를 사용하지 않아도 된다.
: 결국 자바 8에 추가된 스트림 API 덕분에 다른 두 가지 기능, 즉 메서드에 코드를 전달하는 간결 기법과 인터페이스의 디폴트 메서드가 존재할 수 있음을 알 수 있다.
: 메서드에 코드를 전달하는 기법을 이용하면 새롭고 간결한 방식으로 동작 파라미터화를 구현할 수 있다.
: 또한 함수형 프로그래밍에서 위력을 발휘한다. 코드를 전달하거나 조합해서 자바의 강력한 프로그래밍 도구로 활용할 수 있다.