[TIL] 멋쟁이사자처럼 클라우드 엔지니어링 부트캠프 수강생 후기 - Java Stream API 핵심 정리

Java Stream API의 전체 구조(생성·중간처리·최종처리), filter·map·flatMap 사용법, IntStream vs Stream<Integer> 차이까지 직접 정리한 멋쟁이사자처럼 클라우드 엔지니어링 6기 부트캠프 수강생의 14일차 TIL 기록이에요.
[TIL] 멋쟁이사자처럼 클라우드 엔지니어링 부트캠프 수강생 후기 - Java Stream API 핵심 정리

[멋쟁이사자처럼이 전하는 말]

"처음 자바를 배울 때, 리스트 데이터를 처리하는 코드가 왜 이렇게 복잡하지?" 싶었던 적 있나요? 반복문 안에 조건문, 또 그 안에 정렬 로직까지 쌓이다 보면 코드 자체가 미로가 되어버리곤 하죠. Stream API는 바로 그 복잡함을 해결하기 위해 등장한 자바의 핵심 기능이에요.

멋쟁이사자처럼 부트캠프는 단순히 배우는 것에 그치지 않고, 배운 내용을 내 것으로 만드는 방법까지 함께 고민하고 있어요. 그중 하나가 바로 TIL(Today I Learned) 블로그 챌린지예요. 매일 배운 내용을 글로 정리하면서, 개념은 더 단단해지고 기억은 더 오래 남게 되죠.

오늘 소개할 학습 일기 TIL의 주제는 Java Stream API예요. stream 생성부터 중간처리(filter·sorted·map·flatMap), 최종처리까지 전체 구조를 직접 코드와 함께 정리하고, IntStream과 Stream<Integer>의 차이처럼 헷갈렸던 개념을 스스로 파고든 과정도 담겨 있어요. 멋쟁이사자처럼 클라우드 엔지니어링 부트캠프 수강생의 솔직한 14일차 기록을 지금 확인해 보세요!

💡

이런 분들이 읽으면 좋아요!

  • 멋쟁이사자처럼 클라우드 엔지니어링 부트캠프가 어떻게 운영되는지 궁금한 분

  • Java Stream API를 공부 중이거나 filter·map·flatMap 차이가 헷갈리는 분

  • 부트캠프 합류 전, 수강생의 실제 공부 방식이 궁금한 분


14일차 26.04.13

저번주에 앓고싶어 난리난 갑자증이를 구했다. 무려 냥냥승이다🐱 ( )

구하는 과정이 굉장히 힘난했고, 날씨줄이 라널을 화게 되었으나 지금은 내 존에 딜어 있으니 이 주 뿌듯하다 Vv

부캠도 드디어 2주 차를 돌파했는데 오늘이 전혀 고바겠다. 나는 그만 정신을 털어버리고 말았다 하하 내 기준 게임 어려웠던 날이며 점심시간 이후부터 바보가 된 것 같다 월요일이라 그런가?

닭이 너무 먹어진다. 버타막 먹고싶다 O____0 (역지 유행이라고 돌돌대시 마만)


🍗 오늘 배운 내용 : Stream API


❓ 왜 배웠는가?

기존의 컬렉션 API(List, Set, Map)는 데이터를 저장/수정/삭제/조회 같은 기능만 제공함.

하지만, 실게 개발에서는 필터링, 정렬, 중복 제거 등이 필요하기 때문에 Stream API를 사용한다. 지난시간에 게생을 잠만 언급했지만에 더 자세한 에서서 실습을 통해 코드 갈아흔 흔이가 블래를 배웠다.


📋 핵심 개념 정리

1. Stream 의 전체 구조 (**)

  • stream 생성

  • 중간처리

  • 최종처리

1) 컬렉션 또는 배열에서 Stream 뽑기

List<String> list = Arrays.asList("a", "b", "c");

list.stream(); // Stream 생성

+) 배열도 가능

Arrays.stream(arr);

2) 중간 처리(데이터 가공 단계) (**************)

  • 여러 개 이어서 사용 가능

  • 실제 실행은 최종처리 전까지 안됨

주요 기능들

가. 필터링 : 조건에 맞는 것만 남김

list.stream()
    .filter(s -> s.equals("a"))

나. 정렬(sorted)

list.stream()
    .sorted()

다. 데이터 변환(map)

  • 1개 -> 1개로 변환 ex)

list.stream()
    .map(s -> s.toUpperCase())

["a","b","c"] → ["A","B","C"]

<map vs flatMap>

  • map은 하나에서 하나로 변환

["a","b"] → ["A","B"]

  • flatMap은 하나에서 여러개로 변환 (구조를 펼치는 느낌)

Stream.of("a/b/c")
        .flatMap(s -> Arrays.stream(s.split("/")))

결과)

["a","b","c"]

라. skip / limit

list.stream()
    .skip(2)   // 앞에서 2개 건너뜀
    .limit(3)  // 3개만 가져옴

3. 최종 처리 (결과 만든 단계) -> 미게 실행되며어 stream이 동작함.

  • 합계 / 평균/ 최대/ 최소 (sum, average, max, min)

ex) 합계

IntStream.of(1,2,3,4)
        .sum();
  • 가수

list.stream().count();
  • 반복(forEach)

list.stream()
    .forEach(s -> System.out.println(s));
  • 컬렉션 변환 (Set -> List 변환 o)

list.stream()
    .collect(Collectors.toList());
  • Optional ***** : 값이 있을 수도 있고 없을 수도 있음을 표현

  • null대신 사용

  • NullPointerException 방지

  • 만만하게 값 처이 → 중요한 이유: stream에서 찾았는데 값이 없으면 null -> 오류 발생 가능

ex)

Optional<String> result =
    list.stream().findFirst();

값 꺼내기)

  • 값 없으면 기본값 반환

result.orElse("기본값");

4. 익명클래스, 람다식, 메서드 참조(*****) 상황: 리스트에 있는 이름을 하나씩 출력하기

1) 익명 클래스

Consumer<String> c = new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
};

list.stream().forEach(c);

=> 길고 복잡함 !

2) 람다식, 메서드 참조

가. 람다식

  • 필요한 동작만 간단히 적는것

  • class 없음

  • 메서드 이름 없음

list.stream().forEach(s -> System.out.println(s));

나. 메서드 참조 (최종 진화)

  • 람다식 안에서 메서드 하나만 쓸 때 사용

list.stream().forEach(System.out::println);

메서드 참조 사용 불가 : 메서드 2개이기 때문

s -> {
    System.out.println(s);
    System.out.println("끝");
}

😅 어려웠던 점 & 해결방법

1.

문제상황 숫자 데이터 처리 시 IntStream을 사용하는데 Stream <Integer>과 차이점이 헷갈림

🔴 접근방법 계산은 숫자 전용 기능이라는 점에 집중

해결방법 IntStream은 숫자 계산에 최적화된 Stream으로 sum(), average()같은 기능이 바로 사용 가능. 물론, Stream <Integer>도 사용 가능하지만 변환이 필요하다.

1) Stream<Integer>

List<Integer> list = Arrays.asList(1,2,3,4);

int sum = list.stream()
    .mapToInt(n -> n)  // 변환 필요
    .sum();

2) IntStream

int sum = Arrays.stream(new int[]{1,2,3,4})
    .sum();

=> 훨씬 간편


백엔드를 처음 공부할 때 JDBC 하나를 이해하는 데도 Driver, Facade 패턴, JPA까지 여러 개념이 엮여 있다는 걸 알게 되는 과정 자체가 성장이에요.

멋쟁이사자처럼 부트캠프에서는 이처럼 배운 내용을 기록하고 체계화하는 루틴이 수강생들의 실력으로 자연스럽게 쌓여가고 있어요. 백엔드 개발이 궁금하다면 지금 바로 확인해 보세요.

멋쟁이사자처럼 클라우드 엔지니어링 부트캠프 상세보기
Share article