[Java] 스트림 (Stream)
많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다.
물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다.
이런 단점들을 극복하기 위해 스트림이 만들어졌다.
스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다.
바로 코드를 통해 알아보자.
String 배열을 생성하고, 그 배열을 소스로 스트림을 생성한다. (배열 말고도 LinkedList, ArrayList 등 여러 가지가 소스가 될 수 있다)
이 다음 스트림의 여러 가지 메서드들을 읽어보자.
String은 Comparable이 정의돼있기 때문에(순서가 정의돼있기 때문에) sort 메서드로 정렬이 가능하다.
위의 코드에서 볼 수 있듯, stream의 사용방법은 객체의 집합.스트림생성().중간연산().최종연산(); 형태로 진행된다.
활용 예시를 살펴보자.
List<String> names = Arrays.asList("jeong", "pro", "jdk", "java");
// 기존의 코딩 방식
long count = 0;
for (String name : names) {
if (name.contains("o")) {
count++;
}
}
System.out.println("Count : " + count); // 2
// 스트림 이용한 방식
count = 0;
count = names.stream().filter(x -> x.contains("o")).count();
System.out.println("Count : " + count); // 2
// 출처: https://jeong-pro.tistory.com/165
리스트에서 "o" 가 들어간 요소의 개수를 찾는 코드이다.
스트림을 사용한 코드가 훨씬 더 간결한 코드이고, 더 편하게 처리할 수 있음을 알 수 있다.
이제 스트림의 특징들을 몇 가지 알아보자.
스트림은 일단 만들고 나서는 변경할 수 없다.
스트림을 통해 데이터를 조작하고 조작한 데이터를 새로운 컬렉션에 저장할 수는 있지만, 변경할 수는 없다.
최종 연산까지 거친 스트림은 다시 사용할 수 없다. (Iterator와 비슷함)
다시 쓰려면 또 생성해야 한다.
스트림이 제공하는 다양한 연산을 이용해 복잡한 작업을 간단하게 처리할 수 있다.
다양한 중간 연산과 최종 연산을 제공하는데, 외우지 말고 이런게 있구나~ 로만 생각하자. 필요할 때 찾아 쓰면 된다.
스트림의 특징으로 지연된 연산이 있다.
최종 연산이 수행되기 전까지는 중간 연산이 수행되지 않는다. 최종 연산이 수행된 이후 스트림의 요소들이 중간 연산을 거쳐 최종 연산에서 소모된다. 그 전까지는 어떤 작업이 수행되는지 지정해 주는 역할을 한다.
마지막으로 스트림을 생성하는 방법을 알아보자.
..
'Programming Language > Java' 카테고리의 다른 글
[Java] 예외처리 (0) | 2021.10.29 |
---|---|
[Java] 객체지향 요약 (0) | 2021.10.29 |
[Java] 람다식 (Lambda expression) (0) | 2021.10.25 |
[Java] 컬렉션 프레임웍 (Collections Framework) (0) | 2021.10.19 |
[Java] 열거형 (enums) (0) | 2021.10.18 |
댓글
이 글 공유하기
다른 글
-
[Java] 예외처리
[Java] 예외처리
2021.10.29 -
[Java] 객체지향 요약
[Java] 객체지향 요약
2021.10.29 -
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25 -
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19