T.I.L #28 스트림(Streams)

개발자지망생·2023년 11월 9일
0

스트림(Streams)이란?

자바에서 스트림은 데이터의 흐름을 나타낸다. 이 데이터는 컬렉션(리스트나 세트), 배열, I/O채널 등 다양한 소스에서 올 수 있다. 스트림은 이 데이터에 대해 연산을 수행하는 고수준의 추상화를 제공한다.

스트림은 요리사가 재료를 준비하는 컨베이어 벨트와 같다. 재료를 하나씩 가져다가 씻고, 자르고, 볶는 등의 다양한 작업을 하는데, 이 재료들이 컨베이어 벨트 위를 따라 이동하며 차례차례 조리되는 것을 상상하면 된다. 여기서 재료는 데이터를, 요리사가 하는 일련의 작업들은 우리가 데이터에 적용할 연산들을 의미한다.

스트림(Streams) 기본 개념

1. 출처(Source)

스트림은 데이터를 제공하는 소스가 필요하다. 이 소스는 컬렉션, 배열 등이 될 수 있다.

2. 중개 연산(Intermediate Operations)

이 연산들은 필터링(filtering), 매핑(mapping), 정렬(sorting) 등 데이터 스트림을 변환하는 연산이다. 중요한 점은 중개 연산은 게으르다는 것이다. 즉, 최종 연산이 호출되기 전까지 실행되지 않는다.

3. 최종 연산(Terminal Operations)

이 연산은 스트림의 항목에 대한 계산을 실제로 시작하고 결과를 도출하거나 부작용(side efferts)을 일으키는 연산이다. 예를 들어, forEach, collect, reduce 등이 있다.

스트림(Streams) 예시

1부터 10까지의 숫자가 들어있는 바구니에서 짝수만 골라내어 그 제곱의 합을 구해보자.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

int sumOfSquareOfEvens = numbers.stream()      // 1부터 10까지의 숫자들로 스트림을 생성
    .filter(n -> n % 2 == 0)                   // 짝수만 필터링 (2, 4, 6, 8, 10)
    .mapToInt(n -> n * n)                      // 각 숫자를 제곱 (4, 16, 36, 64, 100)
    .sum();                                    // 제곱한 숫자들의 합을 계산 (220)

System.out.println("Sum of squares of even numbers: " + sumOfSquareOfEvens);
  1. numbers.stram()을 호출하여 리스트로부터 스트림을 생성한다.

  2. .filter(n -> n % 2 == 0) , 이 부분은 스트림의 각 요소를 차례대로 검사하여 짝수인 요소만 다음 단계로 넘겨주는 필터 역할을 한다.

  3. .mapToInt(n -> n * n)는 각 요소를 제곱하는 매핑 작업을 한다.

  4. 마지막으로 .sum()은 모든 제곱된 숫자들을 더해서 최종 결과를 반환한다.

참고한 것 : 자바의 정석 , 구글 서칭

0개의 댓글