블로그

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년부터 기술 회사를 운영하며) 비즈니스 감각을 갖추고 있어, 나는 다행히도 이 디지털 세계에서 더 많은 장점을 가진 현대적인 기업가 세대의 일부로 위치하고 있습니다.
기타 기사
KPI Key Performance Indicator

KPI란 무엇입니까? KPI 시스템 구축 시 고려해야 할 5가지 사항

성공적인 비즈니스 운영의 핵심은 목표를 명확히 설정하고, 그 성과를 측정하는 것입니다. 여기서 KPI(Key Performance Indicator, 핵심 성과 지표)가 중요한 역할을 합니다. KPI는 기업이나 팀이 목표를 달성하는 데 있어 핵심적인 성과를 측정하는 지표로, 데이터 기반 의사 결정을 가능하게 합니다. 그렇다면 효과적인 KPI 시스템을 구축하려면 어떤 점을 고려해야 할까요? 이 글에서는 KPI의 기본 개념부터 시스템 설계 시

세부정보 →
web server development

웹서버 프로그래밍: 초보자부터 전문가까지 가이드

웹서버 프로그래밍은 현대 디지털 인프라의 핵심입니다. 웹사이트, 앱, API를 운영하는 데 필수적인 기술로, 효율적인 서버 구축과 관리가 비즈니스 성공을 좌우하기도 합니다. 이 글에서는 웹서버 프로그래밍의 기본 개념부터 최신 트렌드까지, 체계적으로 설명합니다. 1. 웹서버 프로그래밍이란? 웹서버 프로그래밍은 클라이언트(사용자)의 요청을 처리하고 적절한 응답을 반환하는 서버 측 소프트웨어를 개발하는 과정입니다. Apache, Nginx, Microsoft의 IIS 같은 웹서버 소프트웨어를 활용해

세부정보 →
software development company

2025년 소프트웨어 개발 업체 순위 TOP9: 한국 시장을 선도하는 기업들

소프트웨어 산업은 급격히 진화하며 우리의 일상과 비즈니스 방식을 혁신하고 있습니다. 2025년을 맞아 어떤 기업들이 가장 혁신적이고 신뢰할 만한 성과를 내고 있을까요? 이번 글에서는 2025년 한국 시장에서 주목받는 소프트웨어 개발 업체 TOP9을 소개합니다. 각 기업의 기술력, 시장 영향력, 그리고 미래 전망을 종합적으로 분석해 보겠습니다. 1. 삼성SDS (Samsung SDS) 삼성SDS는 AI, 클라우드, 엔터프라이즈 솔루션 분야에서 독보적인 위치를

세부정보 →
ai literacy

AI 리터러시 (AI Literacy): 미래를 위한 필수 능력

인공지능(AI)은 더 이상 미래의 기술이 아니다. 이미 우리 삶 깊숙이 자리 잡았으며, 업무, 교육, 창의성에 이르기까지 모든 분야를 변화시키고 있다. 하지만 AI를 단순히 “사용하는 것”과 “제대로 이해하는 것” 사이에는 큰 차이가 있다. 바로 AI 리터러시(AI Literacy)가 필요한 이유다. 이 글에서는 AI 리터러시의 중요성, 필요한 핵심 역량, 그리고 실생활에서 적용하는 방법을 알아본다. AI 시대를 살아갈 우리

세부정보 →
Prototype software development

프로토타입이란? (프로토타입 뜻, MVP와의 차이, 개발과정, 노코드 툴 등)

새로운 제품이나 서비스를 개발할 때, 완성된 결과물을 바로 내놓는 것은 위험부담이 크다. 실패 가능성을 줄이고 사용자 피드백을 빠르게 반영하기 위해 프로토타입(Prototype)을 만드는 것이 필수적이다. 그렇다면 프로토타입이 정확히 무엇일까? MVP와는 어떻게 다를까? 그리고 효율적인 프로토타입 개발을 위한 노코드(No-Code) 툴은 어떤 것이 있을까? 이 글에서는 프로토타입의 정의부터 실제 적용 사례, 개발 과정, 그리고 최신 노코드 툴까지 상세히

세부정보 →
ai vision

2025년, 꼭 알아야 할 AI 비전 트렌드 8가지

AI 기술은 빠르게 발전하며 우리의 일상과 비즈니스 환경을 바꾸고 있습니다. 2025년을 준비하는 모든 이들이 주목해야 할 AI 비전 트렌드를 소개합니다. 이 글에서는 최신 기술 동향부터 실생활 적용 사례까지, AI가 이끌 미래를 예측해보겠습니다. 1. 생성형 AI의 진화: 텍스트를 넘어 멀티모달로 2025년에는 생성형 AI가 단순한 텍스트 생성에서 벗어나 이미지, 음성, 동영상까지 통합한 멀티모달 방식으로 발전할 전망입니다. OpenAI의

세부정보 →
Scroll to Top