Modern_java_in_action_part_1
Java 8, 9, 10, 11 : 무슨 일이 일어나고 있는가?
Java는 객체지향 모델의 언어와 JVM이라는 특성을 살려 빠르게 시장을 장악해 나갔다. 하지만, 프로그래밍 언어 생태계에 변화의 바람이 불기 시작했다. 프로그래머는 테라바이트 이상의 데이터셋에 직면하면서 멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 효과적으로 처리할 필요성이 커졌다. 그외에도 큰 시스템의 설계 방식도 변화의 한 요소로 꼽힌다.
이와 관련해서 Java 8의 밑바탕을 이루는 세 가지 프로그래밍 기법을 소개한다.
스트림 처리
스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다. 자바 8에서는 java.util.stream 패키지에 스트림 API가 추가되었다.
스트림 API의 핵심은 기존에는 한 번에 한 항목을 처리했지만 자바 8에서는 우리가 우려하는 작업을 고수준으로 추상화해서 일련의 스트림으로 만들어 처리할 수 있다.
동작 파라미터화로 메서드에 코드 전달하기
public int compareUsingCustomerId(String inv1, String inv2) {
...
}
위와같은 함수를 sort()
의 파라미터로 넘겨주면서 **동작 파라미터화(behavior parameterization)**이라고 부른다.
병렬성과 공유 가변 데이터
스트림 메서드로 전달하는 코드는 다른 코드와 동시에 실행하더라도 안전하게 실행될 수 있어야 한다. 보통 다른 코드와 동시에 실행하더라도 안전하게 실행할 수 있는 코드를 만들려면 공유된 가변 데이터(shared mutable data)에 접근하지 않아야 한다. 이러한 함수를 순수(pure) 함수, 부작용 없는(side effect free) 함수, 상태 없는(stateless) 함수라 부른다.