Skip to Content
Java에 대한 기능적 접근 방식
book

Java에 대한 기능적 접근 방식

by Ben Weidig
May 2025
Beginner to intermediate
414 pages
5h 58m
Korean
O'Reilly Media, Inc.
Book available
Content preview from Java에 대한 기능적 접근 방식

7장. 스트림으로 작업하기

이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com

스트림은 Java 8에 도입된 많은 기능을 활용하여 데이터를 처리하는 선언적 방법을 제공합니다. 스트림 API는 많은 사용 사례를 다루지만, 이를 최대한 활용하려면 다양한 연산과 사용 가능한 헬퍼 클래스가 어떻게 작동하는지 알아야 합니다.

6장에서는 스트림의 기초를 설명하는 데 집중했습니다. 이 장에서는 이를 바탕으로 다양한 사용 사례에 따라 스트림을 만들고 작업하는 다양한 방법을 알려드립니다.

원시 스트림

Java에서 제네릭은 객체 기반 타입에서만 작동합니다(아직은1). 따라서 int 과 같은 기본값의 시퀀스에는 Stream<T> 을 사용할 수 없습니다. 기본 유형을 Stream과 함께 사용하는 옵션은 두 가지뿐입니다:

  • 자동 복싱

  • 특수 스트림 변형

Java의 오토박싱 지원(기본 유형과 intInteger같은 객체 기반 유형 간의 자동 변환)은 다음과 같이 자동으로 작동하기 때문에 간단한 해결 방법처럼 보일 수 있습니다:

Stream<Long> longStream = Stream.of(5L, 23L, 42L);

하지만 오토박싱은 여러 가지 문제를 야기합니다. 우선, 기본값에서 객체로 직접 변환할 때 기본 유형을 직접 사용할 때보다 오버헤드가 발생합니다. 일반적으로 오버헤드는 무시할 수 있는 수준이지만 데이터 처리 파이프라인에서 래퍼 유형을 자주 생성하면 오버헤드가 누적되어 전체 성능이 저하될 수 있습니다.

프리미티브 래퍼의 또 다른 문제점은 null 요소의 가능성입니다. 프리미티브에서 객체 유형으로 직접 변환하면 null 이 반환되지 않지만 파이프라인의 모든 연산이 프리미티브 대신 래퍼 유형을 처리해야 하는 경우 null 을 반환할 수 있습니다.

이를 완화하기 위해 Stream API는 JDK의 다른 기능들과 마찬가지로 표 7-1에 나열된 것처럼 자동 박싱에 의존하지 않고 기본 유형 int, long, double 에 대한 특수한 변형을 제공합니다.

표 7-1. 원시 스트림과 이에 상응하는 스트림
원시 유형 원시 스트림 박스형 스트림

int

IntStream

Stream<Integer>

long

LongStream

Stream<Long>

double

DoubleStream

Stream<Double>

프리미티브 스트림에서 사용 가능한 연산은 일반 스트림과 유사하지만 프리미티브 함수 인터페이스를 사용합니다. 예를 들어 IntStreamStream<T> 과 마찬가지로 엘리먼트 변환을 위한 map 연산을 제공합니다. Stream<T> 과 달리 이를 위해 필요한 고차 함수는 특수 변형인IntUnaryOperator이며, 다음 단순화된 인터페이스 선언에서 볼 수 있듯이 int 을 수락하고 반환합니다:

@FunctionalInterface
public interface IntUnaryOperator {

    int applyAsInt(int 
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

자바로 배우는 핵심 자료구조와 알고리즘: 기술 면접에 필요한 실용주의 자료구조와 알고리즘

자바로 배우는 핵심 자료구조와 알고리즘: 기술 면접에 필요한 실용주의 자료구조와 알고리즘

유동환, 앨런 B. 다우니
Java의 반응형 시스템

Java의 반응형 시스템

Clement Escoffier, Ken Finnigan

Publisher Resources

ISBN: 9798341654457Supplemental Content