본문 바로가기

개발/Java

자바 기능 인터페이스(Java Functional Interfaces)

Java Functional Interfaces

Java의 기능 인터페이스를 빠르게 분석하고 싶습니까? 여기에는 술어, 연산자 및 함수뿐만 아니라 그 사용법을 잘 요약 해 놓았습니다.

java.util.function에서 43 개의 기능 인터페이스의 알파벳 순 목록을 보면 약간 압도적입니다. 그들 모두를 배우고 기억하려고 노력하는 것은 도전이 될 것입니다!

다행스럽게도 조슈아 블로흐 (Joshua Bloch)는 Effective Java의 제 3 판에서 구조를 구했습니다.

항목 44 : 표준 기능 인터페이스의 사용을 선호합니다.

나는 이것을 정말로 읽는 것이 좋습니다!

블로흐 (Bloch) 교수가 설명하는 경우를 제외하고는 직접 작성해야 할 것 같지 않습니다.

  • 설명이 많은 이름이 도움이 될 수 있습니다.
  • 그것과 관련된 강한 계약이있다.
  • 사용자 정의 기본 메소드의 이점

내 목표는 쉬운 참조 (또는 다음 인터뷰)를 위해 자신의 작업을 기반으로 치트 시트를 만드는 것입니다.

기억하십시오  (43 가지 기능 인터페이스 중 39 가지를 다룹니다)

  • 조건부, 단항 연산자, BinaryOperator, 함수, 공급자 및 소비자는 참조 형식을 사용합니다. 각각에는 double, int 또는 long 각각에 대해 작동하는 3 개의 변형이 있습니다.

  • BiPredicate, BiFunction, BiConsumer는 인수로 두 개의 참조 유형을 허용합니다. 

  • 함수에는 프리미티브를 받아 들여 다른 프리미티브를 반환 할 수있는 여섯 가지 변형이 있으며 참조 유형을 받아들이고 프리미티브를 반환하는 여섯 개 (BiFunction 포함)

개요

  • 기본적으로 술어, 단항 연산자, 함수, 공급자, 소비자 및 두 가지 참조 유형에서 작동하는 단일 참조 유형에서 작동하는 다섯 가지 기본 기능 인터페이스가 있습니다. - BinaryOperator

  • 여섯 가지 기본 유형에는 각각 기본, 즉 double, int 또는 long을 허용하는 세 가지 변형이 있습니다.

  • 세 가지 기본 유형의 변형은 두 가지 인수를 허용합니다. BiPredicate, BiFunction, BiConsumer

  • 함수에는 프리미티브 중 하나 (double, int, long) 중 하나를 다른 프리미티브로 변환하는 6 가지 변형이 있습니다.

  • 함수 및 BiFunction에는 각각 참조 유형을 사용하고 기본 double, int 또는 long을 반환하는 3 개의 변형이 있습니다.

  • 공급 업체에는 부울을 반환하는 변형이 있습니다.

  • BiConsumer에는 참조 유형과 프리미티브 (double, int 또는 long)를 허용하는 세 가지 변형이 있습니다.

기본 유형 (Basic Types)

PREDICATE                          

하나 또는 두 개의 인수를 취하고 부울을 반환합니다 (5 개 변형)

UNARY OPERATOR             

결과 및 단일 인수 유형이 동일합니다 (4 변형)

BINARY OPERATOR              

결과 및 두 인수 유형이 동일합니다 (4 변형).

FUNCTION                           

결과와 하나 또는 두 개의 인수 유형이 다릅니다 (17 개 변형)

SUPPLIER                                  

인수를 취하지 않고 값을 반환합니다 (5 변형).

CONSUMER                           

하나 또는 두 개의 인수를 취하고 값을 반환하지 않습니다 (8 개 변형).

 

표기법(Notation)

인터페이스가 기본 인수를 허용하는 경우 접두어 Double, Int, Long (예 : DoubleConsumer)

인터페이스가 프리미티브 결과를 생성하는 경우 : 접두사 ToDouble, ToInt, ToLong, 예 : ToDoubleFunction

인터페이스가 프리미티브를 받아들이고 생성하는 경우 : 접두어 결합 예 : IntToDoubleFunction

객체 유형 및 프리미티브를 허용하는 BiConsumer 변형은 Obj + 프리미티브 (예 : ObjDoubleConsumer)를 접두사로 사용합니다.


패키지 요약

https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

술부    (Predicate)

Predicate<T>

하나의 인수 (참조 유형)의 술어 (부울 값 함수)를 나타냅니다.

DoublePredicate

하나의 이중 값 인수를 허용합니다.

IntPredicate

하나의 int 값을 갖는 인수를받습니다.

LongPredicate

길이가 긴 인수 하나를 허용합니다.

BiPredicate <T, U>

2 개의 인수 (참조 형)를 받아들입니다.


단항 연산자(Unary Operator)

UnaryOperator <T>

피연산자 (참조 유형)와 동일한 유형의 결과를 생성하는 단일 피연산자에 대한 연산을 나타냅니다.

DoubleUnaryOperator

단일 double 값 피연산자를 받아들이고 double 값 결과를 생성합니다.

IntUnaryOperator

단일 int 값 피연산자를 받아들이고 int 값 결과를 생성합니다.

LongUnaryOperator

하나의 long 값 피연산자를 받아들이고 long 값 결과를 생성합니다.


이진 연산자(Binary Operator)

BinaryOperator <T>

동일한 유형의 두 피연산자에 대한 연산을 나타내며 피연산자와 동일한 유형의 결과를 생성합니다 (참조 유형)

DoubleBinaryOperator

두 개의 double 값 피연산자를 받아들이고 double 값 결과를 생성합니다.

IntBinaryOperator

2 개의 int 값 피연산자를 받아들이고 int 값 결과를 생성합니다.

LongBinaryOperator

두 개의 long 값 피연산자를 받아들이고 long 값 결과를 생성합니다.


기능(Function)

함수 <T, R>

하나의 인수를 받아들이고 결과 (참조 형식)를 생성하는 함수를 나타냅니다.

DoubleFunction <R>

double 값의 인수를 받아들이고 결과를 생성합니다.

IntFunction <R>

int 값의 인수를 받아들이고 결과를 생성합니다.

LongFunction <R>

long 값의 인수를 받아들이고 결과를 생성합니다.

DoubleToIntFunction

double 값의 인수를 받아들이고 int 값의 결과를 생성합니다.

DoubleToLongFunction

double 값의 인수를 받아들이고 long 값의 결과를 생성합니다.

IntToDoubleFunction

int 값의 인수를 받아들이고 double 값을 반환합니다.

IntToLongFunction

int 값의 인수를 받아들이고 long 값의 결과를 생성합니다.

LongToIntFunction

long 값의 인수를 받아들이고 int 값의 결과를 생성합니다.

LongToDoubleFunction

long 값의 인수를 받아들이고 double 값을 반환합니다.

ToDoubleFunction <T>

참조 유형을 허용하고 int 값의 결과를 생성합니다.

ToIntFunction <T>

참조 유형을 허용하고 int 값의 결과를 생성합니다.

ToLongFunction <T>

참조 유형을 허용하고 긴 값의 결과를 생성합니다.

BiFunction <T, U, R>

두 개의 인수를 받아들이고 결과 (참조 형식)를 생성하는 함수를 나타냅니다.

ToDoubleBiFunction <T, U>

두 개의 참조 유형 인수를 허용하고 이중 값 결과를 생성합니다.

ToIntBiFunction <T, U>

두 개의 참조 형식 인수를 받아들이고 int 값의 결과를 생성합니다.

ToLongBiFunction <T, U>

두 개의 참조 형식 인수를 받아들이고 long 값의 결과를 생성합니다.


공급자(Supplier)

Supplier <T>

결과 공급자 (reference type)

DoubleSupplier

이중 값 결과의 공급자

IntSupplier

int 값 결과의 공급자

LongSupplier

장기간의 결과를 제공하는 업체

부울 공급 업체

부울 값 결과 공급자


소비자(Consumer)

Consumer <T>

단일 (참조 형식) 입력 인수를 받아들이고 결과를 반환하지 않는 연산을 나타냅니다.

DoubleConsumer

단일 값 인수 하나를 허용하고 결과를 반환하지 않습니다.

IntConsumer

int 값의 단일 인수를 받아들이고 결과를 반환하지 않습니다.

LongConsumer

하나의 long 값의 인수를 받아들이고 결과를 반환하지 않습니다.

BiConsumer <T, U>

두 개의 (참조 형식) 입력 인수를 받아들이고 결과를 반환하지 않는 연산을 나타냅니다.

ObjDoubleConsumer <T>

객체 값 및 이중 값 인수를 허용하고 결과를 반환하지 않습니다.

ObjIntConsumer <T>

객체 값 및 int 값의 인수를 받아들이고 결과를 반환하지 않습니다.

ObjLongConsumer <T>

객체 값 및 long 값의 인수를 받아들이고 결과를 반환하지 않습니다.