내일배움캠프 10일차 TIL : Java - 람다, 스트림

김원기·2024년 5월 1일

TIL

목록 보기
13/42
post-thumbnail

람다의 도입

거대한 크기의 데이터 셋을 다루기에는 부족한 점이 있던 자바가 변화를 위해 도입된 기술이다.

디폴트 메서드를 활용하여 컬렉션을 강화하였고, 거대한 컬렉션을 분산 환경에서 다루기 위한 병렬화 기술이 강화되었다.

컬렉션을 효율적으로 다루기 위해 스트림이 강화되었고, 스트림을 편리하게 사용하기 위해 선언형-함수형 프로그래밍이 도입되었다.

선언형-함수형 프로그래밍을 위해 람다가 도입되었다.

라는게 정의인데 개념이 이렇다 정도면 되지 않을까?

람다?

람다는 쉽게 말해서 식별자 없이 실행 가능한 함수로 익명 함수라고 불린다.

람다는 문법이 간결하여 사용이 편리하다는 특징을 가지고있다.
문법이 간결하기 때문에 코드 작성을 간결하게 해준다는 장점이 있다.

또한 람다식은 메서드의 매개변수로 전달되는 것이 가능하고 메서드의 결과로 반환될 수 있다.

람다식을 통해 메서드를 변수처럼 다룰 수 있다.

람다 장점

  • 함수의 이름을 정의하지 않고 사용이 가능
  • 문법이 간결하고 사용이 편함

람다 단점

  • 람다식을 활용하여 만든 익명함수는 일회용 함수이므로 재사용이 불가
  • 람다식만을 사용하면 비슷한 메서드가 중복되어 생성될 수 있음으로 코드의 가독성 저하

람다 사용법?

//기존에는 메서드를 아래처럼 구현했다.
리턴타입 메서드이름 (매개변수) {
	실행문장
}

//람다식을 통한 변경
(매개변수) -> { 실행문 }

-> 표시로 매개변수를 활용하여 {실행문} 에 포함된 코드를 실행한다는 뜻이다.

스트림

스트림에 대해?

  • 스트림은 람다를 잘 활용할 수 있는 기법 중 하나이다.
  • 스트림은 컬렉션을 반복을 처리하는 일종의 기능이다.
  • 스트림은 자료구조의 흐름을 객체로 제공해주고, 그 흐름동안 사용할 수 있는 메서드를 api로 제공한다.
  • 스트림은 원본 데이터를 변경하지 않으며, 한 번 사용한 스트림은 어디에도 남지 않는다.(1회용)

스트림 장점

  • 필터링, 데이터 변경 및 타입 변환, 자료구조 변환등을 가능하게 한다.
  • 내부 데이터 소스를 변경하지 않는다.

스트림 단점

  • 데이터 소스의 변경을 필요로 하는 경우 유용하지 않다.
  • 작업의 반복이 필요하지 않은 경우 유용하지 않다.
  • 람다처럼 재사용이 불가능하므로 재사용할 경우 재생성이 필요하다.

스트림 api

스트림은 데이터를 처리하기 위해 다양한 연산들을 지원한다.
1. 생성하기
2. 가공하기(중간 연산)
3. 결과 만들기(최종 연산)

스트림 - 생성하기

  • empty stream
  • Collection
  • Array
  • Stream.builder()
  • Stream.generate()
  • Stream.Iterator()
  • 기본 타입 스트림
  • 파일 스트림

스트림 - 가공하기(중간연산)

  • 필터 : filter(), distinct()
  • 변환 : map(), flatMap()
  • 제한 : limit(), skip()
  • 정렬 : sorted()
  • 연산결과 확인 : peek()

스트림 - 결과 만들기(최종연산)

  • 출력 : forEach()
  • 검색 : findFirst(), findAny()
  • 검사 : anyMatch(), allMatch(), nonMatch()
  • 통계 : count(), min(), max()
  • 연산 : sum(), average()
  • 수집 : collect()

끝!

참고
https://adjh54.tistory.com/107 : stream api 생성
https://adjh54.tistory.com/109 : stream api 중간연산
https://adjh54.tistory.com/110 : stream api 최종연산

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글