이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Java] 스트림 (Stream)

  • 2021.10.25 13:29
  • Programming Language/Java
반응형

 

 

 

많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다.

물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다.

이런 단점들을 극복하기 위해 스트림이 만들어졌다.

 

스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다.

바로 코드를 통해 알아보자.

 

 

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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [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
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (666)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (16)
    • 👥 모각코 (6)
    • 💬 기록 (4)
    • 📚 공부 (2)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바