자바 람다(Labmda) - 2 (표준 API Functional Interface, 메소드 참조, 생성자 참조)

dykwon·2024년 1월 17일

표준 API Functional Interface

  1. Consumer : 매개 값 O, 리턴 값 X
  2. Supplier : 매개 값 X, 리턴 값 O
  3. Function : 매개 값 O, 리턴 값 O, 매핑에 사용
  4. Operator : 매개 값 O, 리턴 값 O, 연산에 사용
  5. Predicate : 매개 값 O, 리턴 값 O, True, False 반환

andThen()과 compose() 메소드

  1. Consumer, Function, Operator는 두 개의 함수적 인터페이스를 순차적으로 연결하고 첫번째 결과 값을 두번째 인자로 사용할때 활용한다.
  2. andThen()은 인터페이스A.andThen(인터페이스B)로 실행했을 때 A의 결과값을 B의 인자 값으로 사용하여 최종 결과를 출력한다.
  3. compose()는 인터페이스A.andThen(인터페이스B)로 실행했을 때 B의 결과값을 A의 인자 값으로 사용하여 최종 결과를 출력한다.

and(), or(), negate(), isEqual() 메소드

  1. Predicate 함수적 인터페이스는 and(), or, negate(), isEqual() 디폴트 메소드를 갖고 있다.
  2. and는 && 연산을 or은 || 연산을 negate는 ! 연산을, isEqual은 객체 비교 연산을 나타낸다.

minBy(), maxBy() 메소드

  1. BinaryOperator는 minBy()와 maxBy() 메소드를 갖고 있다.
  2. minBy()와 maxBy()의 인자 값으로는 Comparator< ? super T>를 사용한다.
  3. 두개의 값 중 minBy는 최소값을 maxBy는 최대 값을 리턴한다.

메소드 참조

  1. 메소드 참조는 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것이 목적이다.
  2. 람다식으로 Math.max를 사용하면 이와 같다. (l, r) -> Math.max(l,r);
  3. 메소드 참조를 통해서 사용하면 IntBinaryOperator oper = Math :: max 와 같다.
  4. 정적 메소드를 참조할 경우에는 클래스 이름뒤에 :: 를 붙이고 정적 메소드를 기술한다. Math :: max
  5. 인스턴스 메소드를 참조하는 경우, 먼저 객체를 생성하고 참조변수에 :: 를 붙이고 메소드를 기술한다. variable :: getName

생성자 참조

  1. 생성자 역시 메소드 참조와 같이 참조 할 수 있다.
  2. (a,b) -> {return new Clazz(a,b);} 를 Clazz :: new 와 같이 나타낼 수 있다.
  3. 생성자가 오버로딩되어 여러개 있는 경우, 컴파일러는 함수적 인터페이스의 추상 메소드와 동일한 매개 변수 타입과 개수를 가지고 있는 생성자를 찾아 실행한다.
Function<String, Member> function1 = Member :: new;
Member member1 = function1.apply("name", 23);

Reference : https://docs.oracle.com/javase/8/docs/api/ java.util.function 패키지 검색

profile
Programmer, who turns ideas into value

0개의 댓글