목차
· 람다 표현식이란?
· Function Interface와 람다 표현식
· BiFunction Interface
· 커스텀 @FunctionalInterface
람다 표현식이란
람다 표현식이란 이름이 없는 함수 (Anonymous function)이다.
Function Interface와 람다 표현식
함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문이다.
람다 표현식을 살펴보기 전에 자바에서 제공하는 Function Interface를 보면 다음과 같다.
Function 인터페이스는 java.util.function 패키지에 있으며, T라는 타입의 인풋을 받아 R이란 타입을 반환하는 apply 메서드를 가진다.
package java.util.function;
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
Function 인터페이스를 구현한 곱셈 기능이 있는 클래스를 만들겠다.
public class MultipleFunction implements Function<Integer, Integer> {
@Override
public Integer apply(Integer integer) {
return integer*2;
}
}
위 MultipleFunction이란 function를 사용하기 위해서는 다음과 같이 객체를 생성해서 사용해야 한다.
public static void main(String[] args) {
Function<Integer, Integer> multiple = new MultipleFunction();
Integer result = multiple.apply(3);
System.out.print(result);
}
여기서 느끼겠지만 곱셈 기능을 하기위한 과정이 매우 많다.
1. Funtion을 구현한 클래스를 만든다.
2. new를 이용해 클래스를 생성한다.
3. apply를 이용해 곱셈을 수행한다.
람다 표현식을 이용하면 곱셈이라는 작업을 선언형으로 활용해 자연스럽게 읽고 쓸 수 있는 코드로 작성할 수 있다.
Function<Integer, Integer> addr = (Integer x)->{
return x*2;
};
Integer result = multiple.apply(3);
System.out.print(result);
심지어 위 람다표현식을 더 단순하게 표현할 수 있다.
Function<Integer, Integer> multiple = x->x*2;
Integer result = multiple.apply(3);
System.out.print(result);
다음 조건에 한하여 매개변수와 중괄호, return문이 생략 가능하다.
- 매개변수의 타입이 유추가능 할 경우 타입 생략 가능
- 매개변수가 하나일 경우 괄호 생략 가능
- 바로 리턴하는 경우 중괄호 생략 가능
BiFunction Interface
Function Interface와 마찬가지로 java.util.function 패키지에 존재하는 BiFunction는 매개변수가 두 개이고 반환 값이 있는 경우에 사용한다.
package java.util.function;
@FunctionalInterface
public interface BiFunction<T, U, R> {
R apply(T t, U u);
}
예시 코드는 다음과 같다.
BiFunction<Integer, Integer, Integer> multiple = (x, y)-> x*y;
Integer result = multiple.apply(3, 5);
System.out.println("result = " + result);
커스텀 @FunctionalInterface
Function, BiFunction 인터페이스에 있는 FunctionalInterface 어노테이션은
추상 메서드가 단 한 개인 인터페이스에 사용된다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
위 어노테이션을 이용해 커스텀 함수 인터페이스를 만들 수 있다.
매개변수가 세 개이고 반환 값이 있는 TriFunction 인터페이스를 만들었다.
@FunctionalInterface
public interface TriFunction<T,U,V,R> {
R apply(T t, U u, V v);
}
사용 예시는 다음과 같다.
TriFunction<Integer, Integer, Integer, Integer> multiple = (x,y,z)->x*y*z;
Integer result = multiple.apply(2, 3, 4);
System.out.println("result = " + result);
'Language > Java' 카테고리의 다른 글
Java 스트림 (Stream) 사용법 및 정리 2/3 (Reduce, Max, Min ..) (0) | 2022.10.10 |
---|---|
Java 스트림 (Stream) 사용법 및 정리 1/3 (Map, Filter, FlatMap ..) (0) | 2022.10.09 |
Java 메서드 참조란? (0) | 2022.10.09 |
Java 8 함수형 인터페이스 이해하기 (0) | 2022.10.08 |
Java 8과 함수형 프로그래밍 (0) | 2022.10.08 |