Programming/Java

[Java] 함수형 프로그래밍 - Function Interface / Custom Functional Interface (개념 / 예제)

JeongKyun 2022. 5. 12.
반응형

서론


이번글에서는 함수형 프로그래밍에서 기초라고 볼 수 있는 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

 

GitHub - Anjeongkyun/FunctionalProgramming: 자바 함수형 프로그래밍 학습

자바 함수형 프로그래밍 학습. Contribute to Anjeongkyun/FunctionalProgramming development by creating an account on GitHub.

github.com

 

위 레퍼지토리에서 함수형 프로그래밍에 대해 추가적으로 작성예정이다.

댓글

💲 많이 본 글