Function Interface
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
위에서 Funtion 인터페이스가 의미하는 것
- T라는 Input Type을 받아
- R이라는 Output Type을 반환하는 것
함수를 객체 형태로 만들기
public class Adder implements Function<Integer, Integer> {
@Override
public Integer apply(Integer x) {
return x + 10;
}
}
- Function 인터페이스를 구현하기
- apply 메서드를 오버라이딩하여 원하는 함수를 구현하기
해당 함수를 사용 시에는 아래와 같이 사용할 수 있다.
import chapter3.util.Adder;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> myAdder = new Adder();
int result = myAdder.apply(5);
System.out.println(result);
}
}
- Funtion 객체를 선언하고
- 구현한 함수 클래스(Adder)를 할당
- apply 메서드를 호출하여 결과를 반환받는다.
하지만 위의 과정을 보면 함수 객체를 구현할 때마다 클래스를 구현해야 한다. -> 과연 그럴까?
람다 표현식을 통해 항상 클래스를 선언하지 않아도 함수형 인터페이스를 사용할 수 있다.
람다 표현식 사용하기
Function<Integer, Integer> myAdder = (Integer x) -> {
return x + 10;
};
위와 같은 람다식을 통해 Adder 클래스를 생성하지 않아도 이제 함수형 프로그래밍이 가능하다.
아래는 람다식을 통해 함수형 프로그래밍을 사용한 코드이다.
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> myAdder = (Integer x) -> {
return x + 10;
};
int result = myAdder.apply(5);
System.out.println(result);
}
}
람다 표현식 특징
- 매개변수의 타입이 유추 가능할 경우 타입 생략이 가능하다.
- 매개변수가 하나일 경우 괄호 생략이 가능
- 바로 리턴하는 경우 중괄호
해당 특징들을 적용하기
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> myAdder = x -> x + 10;
int result = myAdder.apply(5);
System.out.println(result);
}
}
'JAVA 🎻' 카테고리의 다른 글
[Java] StackTrace란 (0) | 2023.10.12 |
---|---|
내가 보려고 정리한 Map의 메서드 (0) | 2023.08.18 |
[JAVA] Reactive Streams, Back Pressure란? (0) | 2023.08.05 |
[JAVA] JDBC란? (0) | 2023.06.04 |
[JAVA] 스트림 활용하기 (0) | 2023.03.04 |