Develop

9일차_Lambda, Record, Stream, Optional, Reduce 등 본문

백엔드/KDT_Programmers

9일차_Lambda, Record, Stream, Optional, Reduce 등

230801 2025. 3. 18. 01:08

안녕하세용 !

 

3/14(금) 9일차 입니다. 

주말에 2주치 이론을 복습하다보니 지금쓰게 되었네요ㅎㅎ;;

 

금요일에는 Lambda, Comparator, Date, Record, Stream, Optional, Reduce 등 을 배웠습니다.

이날 진짜 폭풍진도 ㄷㄷ Stream 부터 Optional, Reduce 는 어렵게 느껴졌습니다.

 

 

 

공부내용

 

Lambda

말로만 듣던 람다식! 드디어 배웠습니다~

실제로 써보니 람다식으로 축약되면 저는 코드이해가 더어렵더라고요. (아직 초보라서 그런가;;)

  • Lambda 는 익명 클래스를 더 간결하게 표현하기위한 문법
  • new 키워드를 사용한 객체 생성방식이 아니라 화살표 ( -> ) 를 이용한 함수형 표현식을 이용
  • 오직 하나의 메서드만 존재하는 함수형 인터페이스 (@Functional Interface) 에서만 사용 가능
익명 클래스 (Anonymous Class)
: 기존의 클래스를 굳이 정의하지 않고, 일회성으로 특정 기능을 구현하고 싶을 때 사용
  자주 사용되지 않는 간단한 구현을 위해 별도의 클래스를 만들 필요가 없을 때 유용
  콜백 함수, 이벤트 리스너, 스레드 실행, 정렬 기준 제공등에서 많이 활용됨

 

 

 

Comparator

  • @FunctionalInterface
  • Java에서 정렬기준을 정의할 때 사용되는 인터페이스
  • Comparable과 다르게
    • 외부에서 두 개의 객체를 비교하여 정렬
    • 동일한 객체라도 여러개의 정렬 기준을 적용할 수 있음
    • 기존 클래스의 수정 없이 정렬기준 추가 가능
    • 메서드 : compare(T o1, T o2)
  • 기본 정렬(내추럴 오더링)이 아닌, 커스텀 정렬 기준이 필요할 때 사용
    • ex) 학교 레벨이 아니라 학교명 기준으로 정렬

 

Record

  • 불변 객체를 간단히 생성하는 기능
  • Java 14부터 도입된 문법으로, equals(), hashCode(), toString()을 자동으로 오버라이딩(클래스 여러개 생성하는것보다 빠름)
  • 기존 Lombok @Data, @Value와 비슷하지만, 컴파일 타임에 자동 생성되므로 성능 이점이 있음

 

Stream

  • Java에서 데이터를 함수형 프로그래밍 방식으로 처리하는 방법
    • 데이터 필터링, 매핑, 집계 가능
    • 컬렉션, 배열, 파일 등을 동일한 방식으로 처리할 수 있도록 추상화한 기능
    • 데이터 소스를 직접 다루지 않고, 연산을 정의하는 방식으로 처리
  • 중간연산과 최종연산 개념이 있으며, 최종연산이 수행되기 전까지 중간연산이 실행되지 않음
    • 스트림 생성 : 컬렉션이나 배열에서 스트림 생성
    • 중간 연산 : filter, map, sorted 등으로 데이터 처리
    • 최종 연산 : collect, forEach (스트림의 모든요소에 람다식을 적용하는 메서드)등으로 결과를 얻음
  • 스트림은 Iterator 처럼 일회용이며, 한번 사용하면 다시 사용할 수 없음

 

 

Optional

  • Java 8에서 도입된 클래스로, null 이 될수 있는 값을 안전하게 처리하도록 감싸는 Wrapper 클래스
    • 기존의 null 체크를 if문으로 처리하는 대신, Optional을 이용해 더 안전한 코드 작성 가능
  • Optional 은 값이 있을수도, 없을수도 있는 상황을 다룰 때 유용

 

 

Reduce

  • Stream 에서 누적 연산을 수행할 때 사용되는 최종 연산
  • parallelStream()은 멀티스레드를 사용하여 병렬 연산을 수행하지만, 모든 경우에서 효율적인 것은 아님
  • reduce()를 사용하여 스트림의 모든 요소를 하나의 값으로 축약 가능

 

 

 

그럼 이만..