서론
이번글에서는 함수형 프로그래밍에서 기초라고 볼 수 있는 Function Interface와 Functional Interface를 Custom하여 구현하는 방법에 대해 정리해보려한다.
우선 기본적인 Function Interface 예제를 적용 전과 후를 작성하여 왜 함수형 프로그래밍을 하는지에 대해 알아보자.
Function Interface
[Function Interface 적용 전]
Adder (Class)
import java.util.function.Function;
public class Adder implements Function<Integer, Integer>{
@Override
public Integer apply(Integer x) {
return x + 10;
}
}
FunctionInterface (Class)
import java.util.function.Function;
public class FuntionInterface {
public static void main(String[] args) {
Function<Integer, Integer> myAdder = new Adder();
int result = myAdder.apply(5);
System.out.println(result);
//결과 : 15
}
}
[Function Interface 적용 후]
public class FuntionInterface {
public static void main(String[] args) {
Function<Integer, Integer> myAdder = x -> x + 10;
int result = myAdder.apply(5);
System.out.println(result);
//결과 : 15
}
위와 같이 람다식으로 표현하면 인스턴스를 생성할 필요 없이 바로 결과를 표출할 수 있다. 소스가 굉장히 간결해진 것을 확인할 수 있고 보다 가독성이 좋다.
이제 이 Function Interface를 입맛에 맞게 커스텀하는 방식에 대해 알아보자.
Custom Function Interface
TripleFunction (Interface)
package util;
@FunctionalInterface
public interface TripleFunction<T,U,V,R> {
R apply(T t, U u, V v);
}
CustomFunction (Class)
import util.TripleFunction;
//3개를 인자로 사용하는 Function Interface 구현
public class CustomFunction{
public static void main(String[] args) {
TripleFunction<Integer, Integer, Integer, Integer> addThreeNumbers =
(x, y, z) -> x + y + z;
int result = addThreeNumbers.apply(3, 2, 5);
System.out.println(result);
}
}
Function Interface에서 BiFunction을 사용하면 2개의 인자까지는 사용이 가능하지만 3개의 인자를 받는 함수형 인터페이스는 존재하지 않는데,
위 처럼 @FunctionalInterface를 붙여주고 인터페이스로 사용하면 본인의 입맛에 맞게 커스텀하여 사용할 수 있게된다.
Git 소스 보기
https://github.com/Anjeongkyun/FunctionalProgramming
위 레퍼지토리에서 함수형 프로그래밍에 대해 추가적으로 작성예정이다.
반응형
'Programming > Java' 카테고리의 다른 글
[Java] Singleton 패턴이란? (개념/ 사용 이유/ 장단점/ 예제) (0) | 2022.05.29 |
---|---|
[Java] Optional<T> 이란? (개념/ 종류 별/ 사용 방법/ 예제) (2) | 2022.05.21 |
[Java] SOLID - 의존성 역전 원칙 (DIP / Dependency Inversion Principle)이란? (개념/ 예제) (1) | 2022.05.12 |
[Java] SOLID - 인터페이스 분리 원칙 (ISP / Interface Segregation Principle)이란? (개념/ 예제) (0) | 2022.05.12 |
[JAVA] SOLID - 리스코프 치환 원칙 LSP(Liskov Substitution Principle) (1) | 2022.05.08 |
댓글