국비

[ 28일차 161~168 ] 수업 정리 - 자바

코딩하는냥이 2025. 5. 23. 13:09
반응형

📌 주요 주제: Java Stream API 활용

Java 8부터 도입된 Stream API는 대량의 데이터를 효율적으로 처리할 수 있도록 도와주는 기능입니다. 이번 수업에서는 다양한 스트림 생성 방법과 그 활용 예제를 중심으로 학습했습니다.


📌 예제 코드

✅ 컬렉션 및 배열 기반 스트림

Set<String> set = new HashSet<>();
set.add("홍길동");
set.add("신용권");
set.add("감자바");

set.stream().forEach(name -> System.out.println(name));

✅ 병렬 스트림

List<String> list = Arrays.asList("홍길동", "신용인", "김자바", "비신용", "람다식");
list.parallelStream().forEach(name ->
    System.out.println(name + " : " + Thread.currentThread().getName()));

✅ 파이프라인 처리 - 평균 구하기

List<Student> list = Arrays.asList(
    new Student("홍길동", 10),
    new Student("신용권", 20),
    new Student("김자바", 30)
);

double avg = list.stream()
    .mapToInt(Student::getScore)
    .average()
    .getAsDouble();

System.out.println("평균 점수 : " + avg);

✅ 배열 스트림

String[] names = { "홍길동", "김자바", "파이썬" };
Arrays.stream(names).forEach(System.out::println);

int[] nums = { 1, 2, 3, 4, 5 };
Arrays.stream(nums).forEach(System.out::println);

✅ 범위 스트림

IntStream.rangeClosed(1, 100).forEach(i -> sum += i);
System.out.println(sum);

✅ 파일 스트림

Path path = Paths.get(StreamExample.class.getResource("data.txt").toURI());
Stream<String> stream = Files.lines(path, Charset.defaultCharset());
stream.forEach(System.out::println);
stream.close();

📌 고급 활용

✅ Product 객체 스트림 출력

List<Product> list = new ArrayList<>();
for(int i = 1; i <= 5; i++)
    list.add(new Product(i, (int)(Math.random()*10000), "상품"+i, "멋진회사"));

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

✅ 필터링과 중복 제거

list.stream().distinct().filter(n -> n.startsWith("신")).forEach(System.out::println);

💡 포인트 정리

  • stream(): 컬렉션이나 배열을 스트림으로 변환
  • parallelStream(): 병렬 스트림으로 처리 속도 향상 가능
  • mapToInt(), average(): 수치 데이터 집계 처리
  • distinct(), filter(): 중복 제거 및 조건 필터링
  • Files.lines(): 파일 내용을 스트림으로 읽기
  • 스트림은 한 번만 소비 가능하며 재사용 불가
  • 중간 연산(filter, map)과 최종 연산(forEach, sum)을 구분해서 사용할 것

📌정리하자면, 28일차 수업에서는 스트림(Stream)을 통해 데이터를 간결하고 효율적으로 처리하는 방법을 배웠습니다. forEach, mapToInt, filter, distinct, Files.lines() 등 다양한 연산을 조합하여 데이터 흐름을 구성하는 사고방식을 키우는 것이 핵심입니다. 실무에서도 자주 사용되므로, 반복 학습을 통해 자연스럽게 익혀두면 좋습니다!