Home [모던 자바 인 액션 ch1] 자바 8,9,10,11 : 무슨 일이 일어나고 있는가?
Post
Cancel

[모던 자바 인 액션 ch1] 자바 8,9,10,11 : 무슨 일이 일어나고 있는가?

[Modern Java In Action] ch1. 자바 8,9,10,11 무슨 일이 일어나고 있는가?

Modern Java In Action 공부를 한 후 정리한 내용입니다.

자바 8은 자바 역사를 통틀어 가장 큰 변화가 일어났다. 자바 8에서는 병렬 실행을 새롭고 단순한 방식으로 접근할 수 있는 방법을 제공한다.

자바 5는 스레드 풀, 병령 실행 컬렉션을 제공하였고, 자바 7은 병렬 실행에 도움을 줄 수 있는 포크/조인 프레임워크를 제공했지만, 활용하기 쉽지 않았다. 자바 9는 중요한 변화가 있었지만, 자바 8만큼 획기적이거나 생산성이 바뀌는 것은 아니였다. 그리고 자바 10은 형 추론과 관련해 약간의 변화만 일어났다.

자바는 왜 병렬성에 집중하는 것일까?
프로그래머는 빅데이터라는 도전에 직면하면서 멀티 코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 빅데이터를 효과적으로 처리할 필요성이 커졌기 때문이다.

그래서 자바 8에서 제공해주는 새로운 기능은 무엇인가?? 다음과 같다.

  1. 스트림 API
  2. 메서드에 코드를 전달하는 기법 (메서드 참조와 람다)
  3. 인터페이스의 디폴트 메서드

스트림 처리

스트림이란 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
자바 8에는 java.util.stream 패키지에 스트림 API가 추가되었다. 스트림 패키지에 정의된 Stream는 T 형식으로 구성된 일련의 항목을 의미한다. 스트림 API는 파이프라인을 만드는 데 필요함 많은 메서드를 제공한다.

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

코드의 일부를 파라미터로 전달하는 기능이다. 스트림이 연산 동작을 할 때, 특정 코드를 파라미터로 보내서 의도하는 특정 동작을 할 수 있게 하는 기능이다.

병렬성과 공유 가변 데이터

병렬성을 얻는 대신, 공유된 가변 데이터에 접근하지 않아야 한다. 이러한 함수를 순수 함수(상태 없는 함수, 부작용 없는 함수) 하고 한다.

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

자바 8에서는 함수를 새로운 값의 Type로 추가했다. int,double,Object, List와 같이 함수 자체를 값으로 취급한다는 뜻이다. 이렇게 함수를 “값”으로 취급하면서 함수를 파라미터로 전달할 수 있게 되었다. 그리고 이러한 기능들은 스트림과 같은 다른 자바8의 기능을 토대로 제공했다.

메서드 참조 (Method Reference)
1
2
File[] hiddenFiles = new File(".").listFiles(File::isHidden);

자바 8의 메서드 참조 :: (‘이 메서드를 값으로 사용하라’는 의미) 를 이용해서 listFiles에 직접 전달할 수 있다.
즉, File.class 에 isHidden 이라는 메서드가 있는데, 이 메서드를 :: 를 이용해서 참조하는 코드이다. 메서드를 값으로 이용이 가능하기 때문에 위와 같은 코드가 가능한 것이다.

원래는 기존에 객체 참조(new로 객체 참조)를 이용해서 객체를 이리저리 주고받았던 것처럼, 자바 8 에서는 File::isHidden을 이용해서 메서드 참조를 만들어 전달할 수 있게 된 것이다.

람다 : 익명함수

람다 표현식이란 메서드(함수)를 하나의 식으로 표현해서 값으로 취급하는 것이다. 람다 문법을 활용하면 간결하게 코드를 구현할 수 있다. 함수를 일급값으로 넘겨주는 프로그램을 구현하는 것을 람다 문법 형식이라고 한다

This post is licensed under CC BY 4.0 by the author.

[Design Pattern] 싱글턴 패턴 (Singleton Pattern)

[모던 자바 인 액션 ch2] 동작 파라미터화 코드 전달하기