1. 스트림
자바에서 가장 많이 하는 일 중 하나가, 컬렉션을 만들고, 바꾸고, 그룹화하고, 없애고… 하는 등 \’컬렉션\’ 에 대한 연산들이다.
배열,집합,큐 등등….들어보기만 해도 ‘많이 쓴다’ 의 느낌이지 않을까..
근데 레거시 자바(7 이하)에서는 이 컬렉션을 사용하는 법을 나름 지원한다고는 하는데, 이를 사용하기 위해서 앞뒤에 쓸데없는 코드들이 너무 많이 붙는 경우가 상당히 많다.
그래서 이 컬렉션을 편하게, 적은 리소스 사용만으로 효과적으로 연산할 수 있도록 나온 개념이 ‘스트림’이다.
이 책에서는 스트림이 크게 2가지 경우에 많은 개선을 이룰 수 있다고 기입한다.
- 선언형 구문
- 멀티코어 아키텍쳐를 이용한 병렬처리
[expand title=”선언형이란”]
HOW보다 WHAT에 집중하는 구조이고, 동사보다는 명사형이다.
선언형의 가장 좋은 예시가 ‘쿼리’인데
SELECT name FROM dishes WHERE calorie < 400 과 같은, 무엇(what)을 원하는지 코드(혹은 쿼리) 그 자체에 들어가 있다.
가장 좋은 예시는 주소찾기가 되겠다.
– 명령형 : 집에서 나와서, 두 블럭 북쪽으로 가다가 횡단보도를 건너고, 거기서 세번째 골목으로 오면 목적지에 도착한다
– 선언형 : 너의 목적지는 ‘서울스퀘어’야
[/expand]
선언형 구문, 멀티코어 아키텍쳐를 쉽게 사용할 수 있는 예제를 바로 확인해 본다.
기존 레거시 자바(7 이하)의 코드이다.
List<String> lowCalorieDish = menu.stream()
.filter(d -> d.getCalories() < 40)
.sorted(comparing(Dishes::getCalories))
.map(DIsh::getName)
.collect();