함수형 인터페이스란 단 1개의 추상 메서드를 갖는 인터페이스를 말한다.
JAVA 8 부터는 기본 구현체를 포함한 default method 및 static method도 포함할 수 있다.
그러나 추상 메서드는 딱 1개!!만 있어야 한다.
그리고 자바의 람다 표현식은 함수형 인터페이스로만 사용이 가능하다
함수형 인터페이스를 만들 때 해당 어노테이션을 달지 않아도 추상 메서드가 1개라면 함수형 인터페이스로 활용할 수 있이나, 해당 어노테이션을 활용하면 문법 검사를 할 수 있기 때문에 유지보수 등의 측면에서 어노테이션을 달아주는 것이 좋다.
내가 기억해야 하는 것은 바로 이것!!
내가 직접 만들어서 함수형 인터페이스를 활용할 수도 있으나, 다양한 람다식의 활용을 위해서 기본적으로 자바에서 제공하는 함수형 인터페이스를 알아야 한다.
많은 기본 함수형 인테페이스들이 있지만, 그 중 자주 사용되는 대표적인 것들만 몇개 정리해보겠다.
| 함수형 인터페이스 | 설명 | 추상메소드 |
|---|---|---|
| Predicate | T -> boolean | boolean test(T t) |
| Consumer | T -> void | void accept(T t) |
| Supplier | () -> T | T get() |
| Function<T, R> | T -> R | R apply(T t) |
| Comparator | (T, T) -> int | int compare(T o1, T o2) |
| Runnable | () -> void | void run() |
매개값을 받아 검사하고 true or false를 반환한다.
매개값을 전달받아 소비하고 아무것도 반환하지 않는다.
매개값 없이 호출한 곳으로 함수에 지정된 값을 반환한다.
주로 매개값을 반환값으로 매핑할 때 즉, 타입 변환이 목적일 때 사용한다.
매개값 두 개를 전달받아 o1 > o2일 경우 양수, o1 < o2일 경우 음수, o1 == 02일 경우 0을 반환한다.
thread에서 많이 사용된다.
람다식이란 메서드를 하나의 식으로 표현한 것으로, 코드를 간결하면서 명확하게 표현할 수 있도록 한다.
(인자 리스트) -> {바디}
람다식 내부에서 외부의 변수를 참조할 경우 해당 변수는 final이거나 effective final인 경우에만 참조할 수 있다
| 타입 | 포맷 |
|---|---|
| 스태틱 메서드 | 타입::스태틱 메서드 |
| 특정 객체의 인스턴스 메소드 | 객체 레퍼런스::인스턴스 메소드 |
| 임의 객체의 인스턴스 메소드 | 타입::인스턴스 메소드 |
| 생성자 참조 | 타입::new |
🥲 알쏭달쏭..
솔직히 지금까지 알쏭달쏭하다.. 여러 예제를 보고 있는데 코드에서 실제로 언제 사용해야하는지 감이 잘 오지 않는다.
스트림에 대해서 공부해야 좀 더 확실하게 사용처를 잘 습득할 것 같은 느낌..?
계속해서 더 찾아볼 예정! 그때마다 이 포스트에 업데이트해야겠다.