Chapter 14 람다와 스트림 1.4~

Seunghee Ryu·2023년 11월 2일
0

자바의 정석

목록 보기
8/11

java.until.function 패키지

  • 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 둠
  • 가능하면 이 패키지의 인터페이스를 활용하는 것이 좋음
  • 메서드 이름 통일, 재사용성이나 유지보수 측면에서 좋음

조건식의 표현에 사용되는 Predicate

  • Predicate는 function의 변형으로 반환 타입이 boolean이라는 것만 다른다

매개 변수가 두개인 함수형 인터페이스

  • 매개 변수가 2개인 함수형 인터페이스는 이름 앞에 접두사 bi가 붙는다
  • 두 개 이상의 매개 변수를 갖는 함수형 인터페이스가 필요하다면 직접 만들어서 써야한다

unaryOperatior 와 BinaryOperator

  • Function의 또 다른 변형
  • 매개 변수의 타입과 반환 타입의 타입이 모두 일치한다는 점만 제외하고 Function과 같다

컬렉션 프레임웍과 함수형 인터페이스

  • 컬ㄹ렉션 프레임웍의 인터페이스에 다수의 디폴트 메서드가 있는데 그 중의 일부는 함수형 인터페이스를 사용한다

기본형을 사용하는 함수형 인터페이스

  • 기본형 타입의 값을 처리할 때 래퍼 클래스를 사용하면 비효율적
  • 기본형을 사용하는 함수형 인터페이스 제공됨

메서드 참조

  • 메서드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어 람다식에서 불필요한 매개 변수를 제거하는 것
  • 정적 메소드를 참조할 경우 -> 클래스 :: 메소드
  • 인스턴스 메소드를 참조할 경우 -> 참조변수 ::: 메소드

스트림

  • 많은 수의 데이터를 다룰 때 컬렉션이나 배열에 데이터를 담고 원하는 방식으로 결과를 얻기 위해 for문과 Iterator를 이용해서 코드를 작성해 왔다
    - 이런 식으로 작성된 코드는 알아보기 어렵고 재사용성이 떨어진다
    - 데이터 소스마다 다른 방식으로 다뤄야 한다
  • 이런 문제점을 해결하기 위해 만든 것이 스트림
    - 데이터 소스를 추상화하고 자주 사용되는 메서드들을 정의해 뒀다
    - 스트림을 이용하면 배열이나 컬렉션 뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다
  • 스트림은 데이터 소스를 변경하지 않는다
    - 필요하다면 정렬된 결과를 컬렉션이나 배열에 담아서 반환할 수 있다
  • 스트림은 일회용이다
    - 한 번 사용하고 나면 닫혀서 다시 사용할 수 없다
  • 스트림은 작업을 내부 반복으로 처리한다
    - 반복문을 메서드의 내부에 숨길 수 있다는 것을 의미
  • 연산을 이용하여 복잡한 작업을 간단히 처리할 수 있다
    - 중간 연산 : 연산 결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있음
    - 최종 연산 : 연산 결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 단 한번만 가능
  • 지연된 연산
    - 최종 연산이 수행되기 전까지는 중간 연산이 수행되지 않는다는 것
  • 오토박싱&언박싱으로 인한 비효율을 줄이기 위해서 데이터 소스의 요소를 기본형으로 다루는 스트림이 제공된다
  • 병렬 스트림
    - 병렬 처리가 쉬워지나 병렬 처리가 항상 더 빠른 결과를 얻게 해주는 것은 아니다
  • 스트림 메서드
    - https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

0개의 댓글