Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 JShell에서 중간 스트림 연산(Intermediate Operations) 사용하는 방법

JShell이란?

JShellJava 9에서 새롭게 도입된 대화형(REPL) 도구입니다. 표현식, 변수, 메서드, 클래스 등 간단한 문장을 입력으로 받아 즉시 실행 결과를 보여주기 때문에, 코드 조각을 빠르게 테스트하고 학습하는 데 매우 유용합니다.

중간 스트림 연산이란?

스트림(Stream)은 값들이 나열된 연속적인 흐름을 의미합니다. 여기서 중간 스트림 연산(intermediate stream operation)은 하나의 스트림을 입력으로 받아 처리한 후, 그 결과로 새로운 스트림을 반환하는 연산을 말합니다. 예를 들어 람다 표현식을 스트림의 각 요소에 적용하고, 그 결과를 다시 스트림 형태로 만들어 내는 방식입니다.

중간 연산은 필요에 따라 여러 개를 체인처럼 연결하여 사용할 수 있으며, 최종 연산(terminal operation)이 호출되기 전까지는 실제로 실행되지 않는 지연(lazy) 특성을 가집니다.

대표적인 중간 스트림 연산

  • 1) sorted(): 스트림의 모든 요소를 그대로 유지하되, 자연스러운(natural) 정렬 순서로 재배치하여 새로운 스트림을 반환합니다.
  • 2) distinct(): 입력 스트림에서 중복을 제거하고 고유한(unique) 요소만 남긴 스트림을 반환합니다. 이때 기존 요소들의 상대적인 순서는 유지됩니다.
  • 3) filter(): 주어진 조건(논리)에 따라 스트림의 요소를 걸러내는 데 사용됩니다.
  • 4) map(): 람다 표현식을 각 요소에 적용해 새로운 값을 계산하고, 그 결과들로 구성된 새로운 스트림을 반환합니다.

JShell에서 중간 스트림 연산 실습하기

다음 코드 예제를 통해 JShell에서 다양한 중간 스트림 연산을 어떻게 활용할 수 있는지 확인할 수 있습니다.

코드 예제

jshell> List<Integer> numbers = List.of(3, 10, 23, 200, 77, 9, 32);
numbers ==> [3, 10, 23, 200, 77, 9, 32]

jshell> numbers.stream().sorted().forEach(elem -> System.out.println(elem));
3
9
10
23
32
77
200

jshell> List<Integer> numbers = List.of(3, 5, 54, 280, 5, 9, 40);
numbers ==> [3, 5, 54, 280, 5, 9, 40]

jshell> numbers.stream().distinct().forEach(elem -> System.out.println(elem));
3
5
54
280
9
40

jshell> numbers.stream().distinct().sorted().forEach(elem -> System.out.println(elem));
3
5
9
40
54
280

jshell> numbers.stream().distinct().map(num -> num * num).forEach(elem -> System.out.println(elem));
9
25
2916
78400
81
1600

예제 해설

  • sorted() 예제: 무작위로 나열된 숫자 리스트가 오름차순으로 정렬되어 출력됩니다.
  • distinct() 예제: 리스트에 두 번 포함된 값 5가 제거되고 고유한 요소만 출력됩니다.
  • distinct().sorted() 예제: 중복 제거와 정렬을 연속으로 적용해, 고유한 요소들이 정렬된 순서로 출력됩니다.
  • distinct().map() 예제: 중복이 제거된 각 요소에 제곱 연산(num * num)을 적용한 결과가 출력됩니다.

이처럼 JShell을 활용하면 별도의 컴파일 과정 없이 스트림 API의 다양한 중간 연산을 즉석에서 실험해볼 수 있어, Java 스트림 프로그래밍을 익히는 데 큰 도움이 됩니다.