함수형의 조건
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; }
람다식은 기본적으로 함수형을 만족한다.
최근댓글