블로그

Stream이란? 기본 개념과 특징 (JAVA)

Stream이란? 기본 개념과 특징 (JAVA)

What is Java Stream

아이디어가 있나요?

Hitek 언제나 당신과 동행할 준비가 되어있습니다.​

Java에서 Stream은 데이터 처리 연산을 지원하는 강력한 API로, 컬렉션, 배열, I/O 소스 등의 요소를 선언적이고 효율적으로 다룰 수 있게 해줍니다. 함수형 프로그래밍 스타일을 도입하여 코드의 가독성과 유지보수성을 높이며, 병렬 처리도 간편하게 구현할 수 있습니다.

이 글에서는 Java Stream의 기본 개념, 주요 특징, 활용 방법을 쉽게 설명하고, 실제 예제를 통해 어떻게 효율적으로 사용할 수 있는지 알아보겠습니다.


1. Stream의 기본 개념

✔ Stream이란?

Java 8부터 도입된 Stream컬렉션, 배열 등의 데이터 소스를 처리하기 위한 추상화된 연산 집합입니다. 기존의 반복문(for, while)을 대체할 수 있으며, 람다 표현식(Lambda Expressions)과 함께 사용해 코드를 간결하게 작성할 수 있습니다.

Stream은 크게 두 가지로 구분됩니다:

  • 중간 연산(Intermediate Operations): filter(), map(), sorted() 등 데이터를 변환하거나 필터링합니다.
  • 최종 연산(Terminal Operations): forEach(), collect(), reduce() 등 결과를 도출하거나 저장합니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
names.stream()  
     .filter(name -> name.startsWith("A")) // 중간 연산  
     .forEach(System.out::println);         // 최종 연산

✔ Stream vs. 컬렉션(Collection)

특징 Stream 컬렉션(Collection)
데이터 저장 저장하지 않음 데이터를 저장
연산 방식 지연 평가(Lazy Evaluation) 즉시 평가(Eager Evaluation)
재사용 가능 불가능 (1회용) 가능
병렬 처리 parallelStream()으로 간단히 구현 직접 구현 필요

Stream은 데이터를 직접 저장하지 않고, 원본 데이터를 읽어 연산을 수행합니다. 또한, 지연 평가(Lazy Evaluation)를 사용해 필요한 시점에만 연산을 실행합니다.


2. Stream의 주요 특징

(1) 선언형 프로그래밍 지원

Stream은 “무엇을 할 것인가(What)”에 집중합니다. 반복문은 “어떻게 할 것인가(How)”를 명시해야 하지만, Stream은 원하는 결과를 선언하면 내부적으로 처리합니다.

// 기존 방식 (How)  
for (String name : names) {  
    if (name.length() > 3) {  
        System.out.println(name);  
    }  
}  

// Stream 방식 (What)  
names.stream()  
     .filter(name -> name.length() > 3)  
     .forEach(System.out::println);

(2) 병렬 처리(Parallel Processing) 간소화

parallelStream()을 사용하면 멀티 스레드 환경에서 데이터를 분할 처리할 수 있습니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);  
int sum = numbers.parallelStream()  
                 .mapToInt(Integer::intValue)  
                 .sum();  
System.out.println("합계: " + sum);

(3) 불변성(Immutable)과 1회용

Stream은 원본 데이터를 변경하지 않으며, 한 번 사용하면 재사용할 수 없습니다.

Stream<String> stream = names.stream();  
stream.forEach(System.out::println);  
// stream.forEach(...); → Error: 스트림이 이미 소비됨

3. Stream의 주요 연산

✔ 중간 연산 (Intermediate Operations)

  • filter(Predicate): 조건에 맞는 요소만 필터링
  • map(Function): 요소를 변환 (예: 문자열 → 길이)
  • sorted(): 정렬
  • distinct(): 중복 제거
List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 4);  
numbers.stream()  
      .filter(n -> n % 2 == 0)  // 짝수만 필터링  
      .map(n -> n * 2)           // 2배 증가  
      .distinct()                // 중복 제거  
      .forEach(System.out::println);

✔ 최종 연산 (Terminal Operations)

  • forEach(Consumer): 각 요소에 작업 수행
  • collect(Collector): 결과를 컬렉션으로 변환
  • reduce(): 요소를 결합 (예: 총합 계산)
  • count(): 요소 개수 반환
List<String> result = names.stream()  
                          .filter(name -> name.length() > 3)  
                          .collect(Collectors.toList());  
System.out.println(result); // [Alice, Charlie]

4. Stream 활용 예제

✔ 조건에 맞는 데이터 필터링

List<Product> products = Arrays.asList(  
    new Product("Laptop", 1200),  
    new Product("Phone", 800),  
    new Product("Tablet", 500)  
);  

List<Product> expensiveProducts = products.stream()  
                                        .filter(p -> p.getPrice() > 1000)  
                                        .collect(Collectors.toList());

✔ 데이터 변환 및 정렬

List<String> cities = Arrays.asList("Seoul", "Busan", "Incheon");  
List<String> sortedCities = cities.stream()  
                                 .sorted()  
                                 .map(String::toUpperCase)  
                                 .collect(Collectors.toList());

✔ 병렬 스트림으로 성능 향상

long count = products.parallelStream()  
                    .filter(p -> p.getPrice() > 500)  
                    .count();

5. Stream 사용 시 주의사항

  • 재사용 불가: 한 번 사용한 Stream은 다시 사용할 수 없습니다.
  • 지연 평가: 중간 연산은 최종 연산이 호출될 때 실행됩니다.
  • 성능 고려: 간단한 연산은 for문이 더 빠를 수 있습니다.

마치며

Java의 Stream API는 데이터 처리 방식을 혁신적으로 바꿨습니다. 람다 표현식과 결합해 코드를 간결하게 만들고, 병렬 처리를 쉽게 구현할 수 있어 현대적인 Java 개발에 필수적입니다.

Stream을 제대로 활용하면 가독성 높은 코드효율적인 데이터 처리를 동시에 얻을 수 있습니다. 이제 여러분의 프로젝트에서 Stream을 적용해보세요!

💡 더 알아보기

“어떤 데이터 처리 작업을 Stream으로 바꿔볼까요?” 💬 댓글로 여러분의 생각을 공유해주세요!

Picture of Khoi Tran

Khoi Tran

Khoi Tran은 하이텍 소프트웨어의 소유자입니다. 사회의 문제를 해결하기 위해 기술적인 솔루션을 기여하는 것에 열정적입니다. 소프트웨어 엔지니어로 6년간 근무한 기술 지식과 (2018년부터 기술 회사를 운영하며) 비즈니스 감각을 갖추고 있어, 나는 다행히도 이 디지털 세계에서 더 많은 장점을 가진 현대적인 기업가 세대의 일부로 위치하고 있습니다.
기타 기사
web development

웹 개발이란? 현대 디지털 시대의 핵심 기술

웹 개발은 현대 디지털 시대에서 없어서는 안 될 핵심 기술입니다. 웹사이트와 웹 애플리케이션을 구축하고 유지보수하는 이 과정은 우리의 일상생활부터 비즈니스에 이르기까지 광범위한 영향을 미치고 있습니다. 이 글에서는 웹 개발의 기본 개념부터 최신 트렌드까지, 웹 개발의 세계를 탐구해보겠습니다. 웹 개발의 기본 개념 웹 개발은 크게 프론트엔드 개발과 백엔드 개발로 나뉩니다. 프론트엔드 개발은 사용자가 직접 상호작용하는 부분을

세부정보 →
Telehealth vs Homecare

텔레헬스 vs 홈케어: 어떤 상황에서 무엇이 더 효과적일까?

멀리 떨어진 병원 대신 스마트폰 화면과 방문 간호사의 선택, 디지털 진료와 직접적인 돌봄 사이의 기준은 의료 상황과 환자의 실제 필요성에 따라 명확하게 나뉜다. 최근 5년간 국내 텔레헬스 시장은 연평균 35% 이상 성장했으며, 2023년 기준 가정 방문 의료 서비스 이용률은 60대 이상 인구에서 28% 증가했습니다. 이 두 서비스는 단순히 대체재가 아닌 상호 보완적 역할을 하며, 디지털

세부정보 →
web game development

웹게임 만들기 전 준비 단계: 성공을 위한 필수 가이드

웹게임은 전 세계적으로 사랑받는 엔터테인먼트 형태 중 하나로, 특히 한국에서는 모바일과 PC를 넘나드는 접근성 덕분에 큰 인기를 끌고 있습니다. 하지만 웹게임을 만드는 것은 단순히 코딩을 배우는 것 이상의 과정입니다. 성공적인 웹게임을 만들기 위해서는 철저한 준비가 필요합니다. 이 글에서는 웹게임 개발을 시작하기 전에 꼭 알아야 할 준비 단계를 상세히 설명합니다. 1. 웹게임 기획: 목표와 타겟 설정

세부정보 →
Summary of Equipment Data Collection and Sensor Strategies

설비 데이터 수집·센서 전략 정리: 한번에 끝내는 실전 가이드

공장의 설비가 말을 한다고 상상해보세요. 소음 속에 섞인 비정상적인 진동, 온도의 미묘한 변화, 소비 전력의 불규칙한 패턴—이것들이 바로 설비가 보내는 신호입니다. 문제는 이 신호를 어떻게 포착하고, 해석하며, 미래를 예측하는 유용한 정보로 바꾸느냐에 있습니다. 데이터 수집과 센서 전략은 디지털 전환의 핵심이자, 스마트 팩토리를 향한 첫걸음입니다. 완벽한 출발을 위한 전략을 정리했습니다. 왜 지금 설비 데이터 수집인가: 보이지

세부정보 →
ibm ai

IBM AI: 혁신적인 인공지능 기술의 현재와 미래

인공지능(AI)은 글로벌 기술 산업을 재편하고 있으며, 그 중심에는 IBM이 있습니다. 수십 년간의 연구와 혁신을 바탕으로 IBM은 AI 분야에서 선두적인 위치를 차지하고 있습니다. 이 글에서는 IBM AI의 핵심 기술, 주요 솔루션, 그리고 한국 시장에서의 적용 사례를 살펴보겠습니다. 1. IBM AI의 핵심 기술: 왓슨과 그 이상 IBM의 AI 플랫폼 왓슨(Watson)은 기업과 개인을 위한 강력한 인공지능 솔루션으로 자리

세부정보 →
Industrial Complex IoT Platform Structure and Architecture

산업단지 IoT 플랫폼, 지능형 인프라의 핵심 아키텍처 설계 가이드

울산 국가산단은 최근 130억 원을 투자해 IoT 센서와 디지털트윈 기반의 통합관제센터를 구축하고 있습니다. 이는 단순한 기술 도입을 넘어, 산업단지 운영의 패러다임을 근본부터 바꾸는 변화입니다. 스마트 공장, 지능형 인프라 관리, 실시간 안전 감시—산업단지 IoT 플랫폼은 이 모든 것을 가능하게 하는 디지털 생태계의 중추입니다. 단순히 센서를 설치하는 것을 넘어, 데이터가 수집·분석·행동으로 이어지는 지능형 시스템의 설계가 성공의 관건입니다.

세부정보 →
Scroll to Top