조종 다음은 개발
article thumbnail

자바 스트림(Stream)이란?🧐

스트림은 JDK8부터 추가된 기능 중 하나로, 컬렉션 인스턴스에 함수를 조합하여 원하는 결과를 필터링하고 가공된 결과를 손쉽게 처리할 수 있는 기능을 제공한다. 함수형 프로그래밍 개념을 지원하며 데이터 처리를 간결하고 효율적으로 할 수 있도록 도와준다.

 

다음은 배열에서 b의 개수를 찾는 과정을 Stream을 사용한 것과 그렇지 않은 것을 비교한 것이다.

Stream 사용 X

List<String> strings = Arrays.asList("a", "b", "b", "c");

int countWithoutStream = 0;
for (String str : strings) {
    if (str.equals("b")) {
        countWithoutStream++;
    }
}

Stream 사용

List<String> strings = Arrays.asList("a", "b", "b", "c");

int countWithStream = (int) strings.stream()
                               .filter(s -> s.equals("b"))
                               .count();

예시를 통해 볼 수 있듯이 Stream 을 활용하면 데이터 처리를 간결하고 효율적으로 할 수 있다.

🎯 특징

원본 데이터를 변경하지 않는다.

기존의 데이터와는 별도로 사용되기 때문에 스트림의 결과를 이후에도 사용하려면 별도의 변수에 할당을 해줘야 한다.

내부 반복으로 작업을 처리한다.

https://velog.io/@gwichanlee/%EC%8A%A4%ED%8A%B8%EB%A6%BCStream-kb2zjwfq

개발자가 코드로 직접 컬랙션 요소를 반복해서 가져올 필요 없이 컬랙션 내부에서 요소들을 반복해서 처리할 수 있다. 이를 통해 효율적으로 데이터를 처리할 수 있고, 개발자는 요소를 어떻게 반복시킬지 상관 쓰지 않고 오로지 요소 처리에만 집중할 수 있다.

🏛️ 스트림 연산 구조

연산의 파이프 라인은 스트림 생성(Create) → 중간연산(Intermediate operating) → 최종연산(Final operation)의 형태를 가지며 이들은. 를 이용한 메서드 체이닝(Method Chanining)으로 구현된다.

Collections같은 객체 집합.스트림생성().중간연산().최종연산()
  • 중간연산 메서드는 리턴 타입이 스트림이므로 계속해서 다른 스트림 메서드를 연결해 사용할 수 있음.
  • 최종연산 메서드는 리턴 타입이 스트림이 아닌 것으로 메서드 체이닝을 끝내는 역할을 함.
  • 최종연산이 실행되어야 중간연산도 처리되기 때문에 중간연산들만으로 구성된 메서드 체인은 실행되지 않음.

🤔 그래서 스트림을 왜 쓰는 거야?

  • 추상화
    • 스트림은 다양한 데이터 소스와 동작을 처리할 수 있는 공통 인터페이스를 제공하고, 이를 통해 데이터 구조의 세부 사항에 대해 몰라도 같은 방법으로 데이터 처리 작업을 효율적으로 수행할 수 있다.
    • 즉, 기존에는 저장된 데이터에 접근하기 위해 반복문 등을 사용해 접근해야 했고 이렇게 작성된 코드는 가독성저하 및 재사용이 불가능하며 정형화된 처리패턴이 없어 데이터마다 다른 방법으로 접근해야 했던걸 개선했다.
  • 가독성
    • 스트림은 함수형 프로그래밍 스타일을 지원하며, 이를 통해 간결하고 가독성 좋은 코드를 작성할 수 있다.
  • 성능 최적화
    • 스트림은 지연 연산(Lazy Evaluation)을 통해 필요한 시점에만 데이터 처리를 수행한다.
  • 병렬처리
    • 따로 병렬처리 로직을 작성할 필요 없이 간단한 메서드를 이용해 병렬처리를 지원한다.

 

Stream 활용!

Stream 활용에 대해서는 아래 링크에서 너무 잘 설명되어 있어서 참고하며 좋을 것 같다!

https://mangkyu.tistory.com/114

 

[Java] Stream API의 활용 및 사용법 - 기초 (3/5)

1. Stream 생성하기 앞서 설명한대로 Stream API를 사용하기 위해서는 먼저 Stream을 생성해주어야 한다. 타입에 따라 Stream을 생성하는 방법이 다른데, 여기서는 Collection과 Array에 대해서 Stream을 생성하

mangkyu.tistory.com

🌐 Reference

자바

스트림(Stream)

profile

조종 다음은 개발

@타칸

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!