Stream, 데이터를 가공하는 효과적인 방법

지인호·2021년 6월 8일
4

자바 Stream

목록 보기
1/4
post-thumbnail

해당 글은 필자가 스트림을 복습한 후 내용을 정리하고자 작성한 글입니다

public static void main(String args[]){
    List<List<Integer> students> = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
    
    for (List<Integer> numberList : numberDoubleList) {
        for(Integer number : numberList) {
            System.out.println(number);
        }
    }
}

해당코드의 문제점이 뭘까요??

이 코드는, 중첩 리스트안의 Integer 객체를 for each 문을 통해 꺼내와서 출력하는 구문입니다.
지금은 출력만 하니 코드가 바로 읽히지만, 만약 코드가 더 추가되면, 중첩 for 문으로 인하여 가독성이 떨어질 수도 있죠.

Stream, 가독성을 올려주는 효율적인 기술

Stream 은 방금 말한 문제점들을 해결해줍니다. 이전의 그 코드를 다음과같이 축약할 수 있죠!

    public static void main(String[] args) {
        List<Integer> students = IntStream.range(1, 10).boxed().collect(Collectors.toList());
        students.forEach(System.out::println);
    }

자바의 Stream 기술 을 사용하여 이전 코드에 비해 훨씬 줄어든 코드를 짠 모습을 볼 수 있습니다.
이렇듯, 스트림을 잘만 사용하면 이전보다 훨씬 가독성이 좋은 코드를 작성할 수 있는데요.
가독성도 늘여주고 우리의 할일도 줄여주는 팔방미인 Stream, 지금부터 알아봅시다!

What is stream

스트림은 자바 8버전에서 추가된 람다 활용 기술 중 하나입니다. 자바 8 이전에는 for 이나 for each 를 통하여, 배열과 컬렉션의 요소를 하나씩 꺼내어 다루었는데요. 로직이 복잡해지면 복잡해질수록, 코드의 양은 기하급수적으로 늘어나게되었죠.

처음에는 메서드를 나누는 방법으로 해결하려하였지만, 이 또한 근본적인 해결책은 아니었습니다.

이를 해결하기 위해 나온 스트림은 바로 "데이터의 흐름" 을 제어하는 기술입니다. 배열이나 컬렉션 안의 데이터들을 여러 함수들을 통하여 효율적으로 가공할 수 있었죠.
또한 스프링은 for each 처럼 직렬적인 처리방식이아니라, 병렬적 처리 (멀티 쓰레딩)가 가능합니다. 하나의 데이터를 가공할때, 이를 여러 작업으로 잘게 나누어 최대한 빨리 작업을 처리 할 수 있죠!

스트림은 다음 3가지의 기술로 나눌 수 있는데요.

  • 스트림 인스턴스를 다양한 방법으로 생성하는 기술
  • 필터링, 맵핑등, 데이터를 원하는 모양으로 가공하는 기술
  • 가공된 스트림을 하나의 결과로 만들어내는 기술

보통은 이러한 기술들은 다음과 같은 과정을 거쳐 활용합니다.

스트림 생성하기 -> 스트림 맵핑하기 -> 스트림 필터링하기(반복) -> 결과 만들기 -> 결과 산출하기

일단 가공할 정보에 대한, 스트림을 생성하고, 이를 맵핑한다음 필터링 작업을 통해 원하는대로 정보를 가공한뒤, 이에대한 결과를 만들어 산출합니다.

다음시간부턴 스트림을 생성하는법부터, 결과를 만들어내기까지, 방금말한 이 과정들을
실제 코드를 통해 살펴보도록하겠습니다!

다들 다음에만나요😆

profile
테오의 스프린트 17기 퍼실리테이터

0개의 댓글