본문

[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 #스트림

공유

댓글 1

  • 게스트 썸네일
    지나가는 개발자
    2021.11.21 08:51

    다른 포스팅보면 기능만 줄줄이 나열해 도움 하나도 안됬는데.. Stream의 목적성에 관련하여 이해하는데 도움이됬습니다.
    잘 보고 갑니다 ^^