개발자의 서재
[java8] 함수형 인터페이스와 람다 본문
1. 함수형 인터페이스와 람다표현식 소개
2. 자바에서 제공하는 함수형 인터페이스
3. 람다표현식
* 람다 표현식
함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다.
코드의 길이를 줄일 수 있다.
* 함수형 프로그래밍
함수를 class object로 사용할 수 있다.
순수함수 - 사이드 이펙트 만들수없다. 함수 외부에있는 값 변경불가 + 외부의값을 참조하지 않는다.
고차함수 : 함수가 함수를 매개변수로 받을 수 있고, 함수를 리턴할 수도 있다.
package com.kevin.java8.functionalInterfaceLamda;
//함수형인터페이스 일경우 어노테이션 명시
@FunctionalInterface
public interface RunSomething {
//JAVA8에서 추가된 함수형 인터페이스
//추상메서드를 딱 1개 가지는 인터페이스를 말함.
void doIt();
}
package com.kevin.java8.functionalInterfaceLamda;
import java.util.function.*;
public class Main {
public static void main(String[] args) {
// 익명 내부 클래스(함수형 인터페이스) 원형
// RunSomething runSomething = new RunSomething() {
// @Override
// public void doIt(){
// System.out.println("Hello");
// }
// };
// 익명 내부 클래스(함수형 인터페이스) > 인텔리제이에서 람다식으로 변경지원
RunSomething runSomething = () -> {
System.out.println("Hello");
System.out.println("Hello2");
};
runSomething.doIt();
}
}
* java8에서 기본제공하는 주요 함수형 인터페이스
Function<T,R> = T타입 받아서 R 리턴 / R apply(T);
BiFunction<T,U,R> = 두개의 값 T,U 받아서 R 리턴 / R apply(T,U);
Consumer<T> = T타입 받아서 리턴X / void Accept(T);
Supplier<T> = T타입 리턴만. / T get();
Predicate<T> = T타입 받아서 BOOLEAN 리턴 / boolean test(T)
* 입력값, 리턴값이 모두 같은 타입일 경우 아래 함수형 인터페이스 사용 가능
UnaryOperator<T>
Function의 특수한 형태로, 입력값 하나를 받아서 동일한 타입을 리턴하는 함수 인터페이스
BinaryOperator<T>
BiFunction의 특수한 형태로, 동일한 타입의 입력값 두개를 받아 리턴하는 함수 인터페이
//Function 함수형 인터페이스 예시 = T타입 받아서 R 리턴 / R apply(T);
Function<Integer, Integer> plus10 = (i) -> i+10;
System.out.println(plus10.apply(1)); //11
//BiFunction 함수형 인터페이스 예시 = 두개의 값 T,U 받아서 R 리턴 / R apply(T,U);
BiFunction<Integer, Integer, Integer> test = (i,j) -> i+j;
System.out.println(test.apply(1,2)); // 3
//Consumer 함수형 인터페이스 예시 = T타입 받아서 리턴X / void Accept(T);
Consumer<Integer> printT = (i) -> System.out.println(i);
printT.accept(1); //1
//Supplier 함수형 인터페이스 예시 = T타입 리턴만. / T get();
Supplier<Integer> get10 = () -> 10;
System.out.println(get10.get()); //10
//Predicate 함수형 인터페이스 예시 = T타입 받아서 BOOLEAN 리턴 / boolean test(T)
Predicate<Integer> isEven = (i) -> i%2 == 0;
System.out.println(isEven.test(4)); //true
'JAVA' 카테고리의 다른 글
[java8] 인터페이스의 변화 - 인터페이스 기본메소드, 스태틱메소드 (0) | 2022.06.13 |
---|---|
[java8] 함수형 인터페이스와 람다 - 메소드 레퍼런스 (0) | 2022.06.13 |
[java8]새로운 날짜와 시간 API (0) | 2022.06.13 |
[lombok] 롬복 - @Slf4j 로 log 출력 (0) | 2022.03.15 |
[JAVA]Comparator 를 이용한 배열, List 정렬 (0) | 2022.02.20 |
Comments