모던 자바 인 액션 4장

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();

Leave a Comment