함수형 인터페이스와 람다

최기곤·2021년 1월 18일
0

자바

목록 보기
3/3

함수형 인터페이스 (Functional Interface)

  • 추상메소드를 딱 하나만 가지고 있는 인터페이스
  • @FunctionalInterface 어노테이션을 붙여서 명시해 줄 수 있다. 이 어노테이션이 붙으면 메소드가 2개 이상일 경우 컴파일에러 발생.
    위 어노테이션이 없더라도 추상메서드 하나라면 함수형 인터페이스!

람다표현식 (Lambda Expressions)

(args) -> { body }

인자리스트

  • args가 없을때 : ()
  • args 한개일 때 : (arg) or arg
  • args 여러개 일 때 : (args1, args2, ...)

바디

  • 화살표 오른쪽에 함수 본문을 정의한다.
  • 여러 줄인 경우에 {}을 묶어서 사용한다.
  • 한 줄인 경우에 {} 생략 가능, return도 생략 가능.

익명 클래스 구현체와 달리 '쉐도윙'하지 않는다.

  • 익명 클래스는 새로 스콥을 만들지만, 람다는 람다를 감싸고 있는 스콥과 같다.

Runnable은 함수형인터페이스다.
기존 사용방법.

Runnable runnable = new Runnable() {
     @Override
     public void run() {
         System.out.println("run 호출");
     }
};
runnable.run();

람다식을 이용한 방법

Runnable runnable = () -> System.out.println("run 호출");
runnable.run();

이처럼 간단하게 표현할 수 있다.

지금부터는 자바에서 제공하는 함수형 인터페이스를 알아보자!

Function<T,R>

  • T타입을 받아서 R타입을 리턴하는 함수형 인터페이스. 추상메소드 apply() 를 가진다.
  • 함수조합용 메소드로 compose, andThen을 가진다.
  • andThen(Function<? super R,? extends V> after) : input 을 받아 함수를 수행한 후 그 결과값을 after 함수의 input 으로 넣어 수행하는 합성함수를 return
  • compose(Function<? super V,? extends T> before) : input 으로 받은 값으로 before 함수를 수행한 후 그 결과값 input으로 받아 수행하는 합성함수를 return

BiFunction<T, U, R>

  • 두개의 값 T,U를 받아서 R타입을 리턴하는 함수형 인터페이스. apply()를 가진다.

Predicate<T, Boolean>

  • T타입을 받아 Boolean을 리턴하는 함수형 인터페이스. 추상메소드 test()를 가진다.

Consumer<T>

  • T타입을 받고 리턴타입이 없다, 즉 void의 형태를 가지는 함수형 인터페이스. 추상메소드 accept()를 가진다.

Supplier<R>

  • 파라미터가 없고 R타입을 리턴하는 함수형 인터페이스. 추상메소드 get()을 가진다.
profile
놀면서 일하고 일하면서 놀고~ 해삐~

0개의 댓글