본문

[2018.01.26] 33. 스트림(Stream) 개념과 사용이유 (Java 8)

도입

이번 포스팅에서는 Java 8에서 나온 개념인 스트림(Stream)을 사용하는 이유 알아보고 개념 학습 후 실습할 예정이다.



개념

(출처 - https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html)


스트림(Stream)은 "함수형 프로그래밍을 지원하기 위한 클래스" 이다.

스트림의 특징은

1) 데이터 구조가 아니다. 데이터의 흐름이다.

2) 데이터를 변경하지 않고 결과를 새로운 스트림에 저장한다.

3) 데이터를 필요한 데이터를 메모리에 로드해 처리한다. (cf 컬렉션은 모든 데이터를 메모리에 로드해 처리)

4) Iterator처럼 데이터에 1번만 접근한다. (추가적은 접근을 위해서는 스트림을 새로 생성해 접근)



사용이유

1. 가독성 향상

스트림 사용 X

스트림 사용 O

1
2
3
4
5
6
7
8
9
List<Dish> lowCaloricDishes = new ArrayList<>();
for (Dish d:menu) {
    if (d.getCalories() < 400)
        lowCalroic/dishes.add(d);
}
        
List<String> lowCaloricDishesName = new ArrayList<>();
for (Dish d:lowCaloricDishes) 
    lowCaloricDishesName.add(d.getName());
cs
1
2
3
4
5
6
List<String> lowCaloricDishesName = 
                menu.stream()
                    .filter(d -> d.getCalories() > 400)
                    .sorted(comparing(Dish::getCalories))
                    .map(Dish::getName)
                    .collect(toList());
cs


2. 병렬화 (성능 향상)

추후 정리




#java8 #stream #스트림

공유

댓글