본문 바로가기
백엔드/Java

함수형 인터페이스

by 1005ptr 2021. 3. 7.
반응형

함수형 인터페이스 란?

  • 추상 메서드가 하나인 인터페이스
  • 추상 메서드가 하나란 말은 다른 메서드는 있어도 된다는 의미
  • default 메서드나, static 메서드는 있어도 된다~

함수형 인터페이스로 쓸때 @FunctionalInterface 어노테이션을 붙여주면

함수형 인터페이스 요건에 어긋나는 경우 잘못됐다고 말해준다.

왜, 어디에 쓰면 좋은가?

  • 구현해야 하는 추상 메서드가 하나이면 람다 표현식으로 코드를 줄일  있다.
  • 함수를 매개변수(파라미터, 반환값)으로 전달할 수 있다.

사용법

단축키: control + .(점)

점을 누르거나 전구를 클릭하면 Convert to lambda expression이라고 뜬다.

자바에서 기본 제공하는 인터페이스

함수를 만들어서 쓸 수 있다.

인터페이스를 쓰면 함수를 조합할 수 있다. (고차함수는 변수로 사용할 수 있기 때문)

함수 체인이랑은 조금 느낌이 다르다.

 

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

 

java.util.function (Java Platform SE 8 )

Interface Summary  Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u

docs.oracle.com

Interface Description
Function<T,R>

Represents a function that accepts one argument and produces a result.

BiFunction<T,U,R>

Represents a function that accepts two arguments and produces a result.

Consumer<T>

Represents an operation that accepts a single input argument and returns no result.

Supplier<T>

Represents a supplier of results.

Predicate<T>

Represents a predicate (boolean-valued function) of one argument.

BinaryOperator<T>

Represents an operation upon two operands of the same type, producing a result of the same type as the operands.

UnaryOperator<T>

Represents an operation on a single operand that produces a result of the same type as its operand.

함수 이어붙이기

1. Predicator

Modifier and Type Method and Description
default Predicate<T> and(Predicate<? super T> other)

Returns a composed predicate that represents a short-circuiting logical AND of this predicate and another.

static <T> Predicate<T> isEqual(Object targetRef)

Returns a predicate that tests if two arguments are equal according to Objects.equals(Object, Object).

default Predicate<T> negate()

Returns a predicate that represents the logical negation of this predicate.

default Predicate<T> or(Predicate<? super T> other)

Returns a composed predicate that represents a short-circuiting logical OR of this predicate and another.

boolean test(T t)

Evaluates this predicate on the given argument.

2. Function

Modifier and Type Method and Description
default <V> Function<T,V> andThen(Function<? super R,? extends V> after)

Returns a composed function that first applies this function to its input, and then applies the after function to the result.

R apply(T t)

Applies this function to the given argument.

default <V> Function<V,R> compose(Function<? super V,? extends T> before)

Returns a composed function that first applies the before function to its input, and then applies this function to the result.

static <T> Function<T,T> identity()

Returns a function that always returns its input argument.

Variable Capture

- 익명 클래스에서는 외부 변수를 참조하는것을 Variable Capture라고 한다.

- final이거나  effective final 경우에만 참조할  있다.

effective final

- 이것도 역시 자바 8부터 지원하는 기능으로 “사실상" final인 변수.

- 사실상 final이라는 것은 초기화하고 바꾸지 않은 경우

- 편의상 제공하는거 같은데 그냥 final 쓰는게 맞다.

Shadowing

- 로컬 클래스, 익명 클래스와 람다가 다른 점

- 람다는 쉐도윙을 하지 않는다.

- 쉐도윙이란 바깥 스코프와 같은 이름이 있으면 안에거가 밖에거를 가려버리는 것

- 람다는 스콥이 없다. 스콥이 자신이 포함된 블록과 같다.

docs.oracle.com/javase/tutorial/java/javaOO/nested.html#shadowing

 

Nested Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

메서드 레퍼런스

- 이 문법으로 메서드를 매우 쉽게 뽑아낼 수 있다.

- 클래스::스태틱메서드 / 인스턴스::메서드 / 클래스::new 같은 식으로 메서드를 뽑아낼 수 있다.

- 자바8에서 Compare 인터페이스도 함수형 인터페이스로 변경되어서 비교, 정렬할때 활용 가능

 

반응형

'백엔드 > Java' 카테고리의 다른 글

Collectors.groupingBy 널(null) 키 사용하기  (1) 2021.03.08
Optional  (0) 2021.03.07
멀티스레드 처리  (0) 2020.12.07
JSON Enum 파싱  (0) 2020.11.10
JSON 문자열 List 타입 파싱할때 LinkedHashMap으로 변환되는 문제  (1) 2020.09.26

댓글