티스토리 뷰
함수형 인터페이스
- 추상 메소드를 딱 하나만 가지고 있는 인터페이스
- @FuncationInterface 애노테이션을 가지고 있는 인터페이스
람다 표현식
- 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있음
- 코드를 줄일 수 있음
- 메소드 매개변수, 리턴타입, 변수로 만들어 사용할수도 있음
package java8study;
@FunctionalInterface
public interface RunSomething {
///추상형 메소드가 하나만 있으면 함수형 인터페이스
void doIt();
// void doAgain(); //하나 더 만들면 에러
//인터페이스 안에서 static 메소드 정의가능
static void printName(){
System.out.println("Jooooo!");
}
//default 메소드 정의
default void printAge(){
System.out.println("29");
}
}
package java8study;
public class Foo {
public static void main(String[] args) {
RunSomething runSomething = () -> System.out.println("Hello");
runSomething.doIt();
}
}
자바에서 제공하는 함수형 인터페이스 (많이 쓰이는거 위주)
1. Function<T,R>
- T타입을 받아 R타입을 리턴하는 함수 인터페이스
- 함수 조합용 메소드 andThen, compose
- 입력값과 결과값이 같은 타입일 때, UnaryOperator 사용 가능
ex : UnaryOperator<Integer> plus10,
UnaryOperator<Integer> multiply2로 써도 됨
2.Supplier<T>
- T탕비의 값을 제공하는 함수 인터페이스
- .get()
3. Predicate<T>
- T타입을 받아 boolean을 리턴하는 함수 인터페이스
- .test(T)
- And, Or, Negate 로 조합가능
package java8study;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
public class Foo {
public static void main(String[] args) {
// Plus10 plus10 = new Plus10();
// System.out.println("->" + plus10.apply(1));
// 1.Function
// Function<Integer, Integer> plus10 = (i) -> i+10;
// System.out.println("-> " + plus10.apply(1));
//// 함수 조합하기 compose, andThen
Function<Integer, Integer> plus10 = (i) -> i+10;
Function<Integer, Integer> multiply2 = (i) -> i*2;
//뒤에오는걸 먼저 계산후, 앞에 함수 계산
Function<Integer, Integer> multiply2AndPlus10 = plus10.compose(multiply2);
System.out.println("multiply2AndPlus10 : " + multiply2AndPlus10.apply(2));
// 앞에 오는걸 먼저 계산
Function<Integer, Integer> plus10AndMultiply2 = plus10.andThen(multiply2);
System.out.println("plus10AndMultiply2 : " + plus10AndMultiply2.apply(2));
///Supplier 인자값 없이 T타입의 값을 제공
Supplier<Integer> get10 = () -> 10;
System.out.println("Supplier :" + get10.get());
///Predicate true false
Predicate<String> startWithJ = (s) -> s.startsWith("j");
Predicate<Integer> isEven = (i) -> i%2 ==0;
System.out.println("Predicate1 : " + startWithJ.test("jeong"));
System.out.println("Predicate2 : " + isEven.test(50));
}
}
강의 : 인프런 더 자바, Java8
'Java' 카테고리의 다른 글
[Java8] CompletableFuture-Concurrent 프로그래밍1. 스레드 (0) | 2021.12.07 |
---|---|
[Java8] Optional 소개 및 API (0) | 2021.07.18 |
[Java8] Stream API 예제 (0) | 2021.07.10 |
[Java8] Stream API (0) | 2021.07.10 |
[Java8] API의 기본 메소드와 스태틱 메소드 Iterable, Collection (0) | 2021.07.10 |
댓글
최근에 올라온 글
최근에 달린 댓글
링크
- Total
- Today
- Yesterday