함수형의 조건

1. 불변성(Immutablility)을 가질 것

2. 1급 객체(First Object)일 것

 

 

java.util.function (Java 8)

// Assignment context
Predicate<String> p = String::isEmpty;

// Method invocation context
stream.filter(e -> e.getSize() > 10)...

// Cast context
stream.map((ToIntFunction) e -> e.getSize())...

일반적인 함수의 모양

function shapes Input Return Mean
Function T R 입력값이 들어왔을 때 결과값을 반환하는 함수
Consumer T void 결과를 반환하지 않는 함수
Predicate T boolean 입력값을 조사하여 논리값으로 반환한다 
Supplier   R 입력값 없이 결과값만 반환하는 함수

 

추가적으로 파생된 함수의 모양

function shapes Input Return Mean
UnaryOperator T   Function에서 파생
BinaryOperator T, U   BiFunction에서 파생

 

함수의 접두사

Prefix   Mean Example
Bi Binary 입력값이 두 개인 함수 BiFunction 등
ToXxx   Xxx형이 반환되는 함수 ToIntFFunction 
Xxx   Xxx형이 입력되는 함수 LongPredicate 
Obj Object Object ObjDoubleConsumer 

 

어노테이션(Annotation)

Annotation Mean
@FunctionalInterface 함수형 인터페이스라는 것을 명시

 

BinaryOperator는 왜 BiOperator가 아니냐는 질문을 다른 사람도 이미 했던 것 같다. 그에 대한 답변(링크)이 있다. Function/BiFunction같은 경우 Function은 일반적으로 단항이기 때문에 UnrayFunction/BinaryFunction이 아니라 Function/BiFuncion이라고 하고, Operator는 단항과 다항간에 관계가 동등하기 때문에 Operator/BiOperator가 아닌 UnrayOperator/BinaryOperator으로 설계하였다고 한다.

 

Lambda Expressions (Java 8)

()->{} 
(List<String> ls)->ls.size() 
(x,y)-> { return x + y; }

람다식은 기본적으로 함수형을 만족한다.

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기