Lambda

기존 자바에서 모던 자바로 넘어오면서 인자에 로직을 넣는 방식을 많이 사용하고 있다

of.ifPresent(junny -> System.out.println("HELLO"));

이런것을 람다식 라고 합니다

함수형 인터페이스

함수형 프로그래밍 방식이 떠오르면서,

자바 진형에서도 이와 비슷하게 구현할 수 있는 선언형 프로그래밍 방식을 추구하는 사람들이 늘어나고 있는 추세 입니다

그중, 이 함수형 인터페이스는 함수형 프로그래밍의 고차함수를 흉내낼 수 있다

ex)

@FunctionalInterface
public interface JunnyFunction {
    void accept();
}
public class JunnyService {
    public JunnyService(JunnyFunction fuction) {}
}
public static void main(String[] args) {
  JunnyService junnyService = new JunnyService(() -> System.out.println("Hello World"));
}

함수형 인터페이스를 만드는 법은 굉장히 간단한데, 인터페이스에 명세가 한개, 즉 메소드를 하나만 선언한다면 사용할 수 있다.

@FunctionalInterface
public interface Sample {
    void execute();
}

Sample sample = () -> 
@FunctionalInterface : 2개이상의 선언을 방지한다  

자바에서 제공하는 API

인터페이스
Descripter
Method

Predicate

인자 하나를 받아서 boolea 리턴

boolean test(T t)

Consumer

Consumer 는 인자 하나를 받고 void

void accept(T t)

Supplier

아무런 인자를 받지 않고 T 타입의 객체를 리턴

T get()

Function<T, R>

T 타입 인자를 받아서 R 타입을 리턴

R apply(T t)

Comparator

T 타입 인자 두개를 받아서 int타입을 리턴

int compare(T o1, T o2)

Runnable

아무런 객체를 받지 않고 void

void run()

Callable

아무런 인자를 받지 않고 T리턴

V call()

이 외에도

등 응용해서 정의된 여러 함수형 인터페이스가 있으니,

개발자가 직접 함수형인터페이스를 구현할만한 일은 거의 없다

Last updated