Java Stream (스트림)

Devkty·2025년 8월 23일

취업도전기

목록 보기
9/32

Java Stream (스트림)

스트림은 데이터가 흐르는 컨베이어벨트와 같습니다. 데이터(배열, 리스트 등)를 이 벨트 위에 올려놓으면, 여러 작업대(메서드)를 거치면서 데이터를 필터링하거나 가공하고, 마지막에 원하는 형태로 완성품(배열, 리스트, 특정 값 등)을 얻는 과정입니다.

Stream 사용법 3단계

  1. 생성하기: 데이터 컨베이어 벨트를 시작합니다.
  2. 중간 연산: 벨트 위를 흐르는 데이터를 가공합니다. (여러번도 가능)
  3. 최종 연산: 가공된 데이터를 모아 결과물을 산출합니다. (마지막 한번만)

단계별 코드와 자세한 설명

  1. 생성하기: 데이터 컨베이어 벨트를 시작합니다.

다양한 데이터 소스로부터 스트림을 만들 수 있습니다.

  • 배열: Arrays.stream(배열)
  • 리스트(List)나 세트(Set): list.stream()
  • 숫자 범위: IntStream.rangeClosed(시작, 끝)
// 예시
String[] names = {"IronMan", "Thor", "Hulk", "Captain"};
Stream<String> stream1 = Arrays.stream(names); // 배열에서 스트림 생성

List<String> nameList = List.of("IronMan", "Thor", "Hulk", "Captain");
Stream<String> stream2 = nameList.stream(); // 리스트에서 스트림 생성

IntStream stream3 = IntStream.rangeClosed(1, 10); // 1~10 숫자 스트림 생성
  1. 중간 연산 (데이터 가공)

컨베이어 벨트가 돌아가는 동안 데이터를 원하는 형태로 가공하는 단계입니다. 여러 개의 중간 연산을 연결해서 사용할 수 있습니다. (메서드 체이닝)

  • filter(조건): 조건에 맞는 데이터만 남깁니다. (예: 짝수만 남기기)
  • map(함수): 각 데이터를 원하는 형태로 변환합니다. (예: 모든 숫자를 제곱하기, 문자열을 대문자로 바꾸기)
  • sorted(): 데이터를 정렬합니다.
  • distinct(): 중복된 데이터를 제거합니다.
// 예시: 1부터 10까지 숫자 중 짝수만 골라서, 그 숫자들을 제곱하기
IntStream.rangeClosed(1, 10)     // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
           .filter(n -> n % 2 == 0) // [2, 4, 6, 8, 10]
           .map(n -> n * n);        // [4, 16, 36, 64, 100]
  1. 최종연산 (결과물 산출)

가공된 데이터를 모아 최종 결과물로 만드는 단계입니다. 최종 연산이 실행되어야 모든 중간 연산들이 실제로 동작합니다.

  • toArray(): 배열로 만듭니다.
  • collect(Collectors.toList()): 리스트로 만듭니다.
  • forEach(동작): 각 데이터에 대해 특정 동작을 수행합니다. (예: 출력)
  • count(): 데이터의 개수를 셉니다.
  • sum(): 모든 숫자를 더합니다.
// 예시: 위에서 만든 스트림을 최종적으로 배열로 만들기
int[] resultArray = IntStream.rangeClosed(1, 10)
                             .filter(n -> n % 2 == 0)
                             .map(n -> n * n)
                             .toArray(); // 최종 연산!
// resultArray는 [4, 16, 36, 64, 100]이 됩니다.

Stream을 사용하는 이유?

  • 코드 간결: for문과 if문을 여러 번 쓰는 것보다 훨씬 짧고 명확하게 코드를 작성할 수 있습니다.
  • 가독성 상승: 코드가 "어떻게" 동작하는지보다 "무엇을" 하는지에 집중하게 되어 이해하기 쉽습니다. "숫자 범위에서, 짝수만 걸러내서, 제곱한 다음, 배열로 만들어 줘" 와 같이 자연스럽게 읽힙니다.
  • 데이터 소스 변경 없음: 스트림은 원본 배열이나 리스트를 직접 수정하지 않고, 그 복사본으로 작업하는 것과 같아서 안전합니다.
profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 구직활동 중입니다.

2개의 댓글

comment-user-thumbnail
2025년 9월 22일

잘 봤습니다! 처음 부분에 Steam으로 R이 빠진 오타가 2부분 있네요!

1개의 답글