개발 메모장

[Java] 함수형 인터페이스(Functional Interface) 본문

Java

[Java] 함수형 인터페이스(Functional Interface)

yyyyMMdd 2024. 6. 13. 14:11
728x90
  • 단일 추상 메서드가 있는 인터페이스이며, 람다식 및 메서드 참조에 대한 내용을 제공합니다.

  • Java 8부터 기능이 추가 됐고 이에 따라 더 손쉽게 개발할 수 있게 됐습니다.

  • 람다식을 이용할 때 더 간결하고 읽기 쉬운 코드를 구현할 수 있으며, 재사용 가능한 코드 구성요소를 작성할 때 좋습니다.

#. 사용자 정의 함수형 인터페이스

  • 위 내용과 같이 함수형 인터페이스를 정의하기 위해선 단일 추상 메서드가 사용되어야 합니다.

  • 이 때 명시적 표기, 가독성 및 컴파일러 적용을 위해 @FunctionalInterface 어노테이션을 추가해줍니다.

  • 아래와 같이 test 메서드에서 MyFuction 함수형 인터페이스를 참조하여 사용할 수 있습니다.
@FunctionalInterface
interface MyFunction() {
	int cal(int x, int y);
}

@RestController
public class LambdaController {

	@GetMapping("/")
	public void test() {
		MyFunction f = (x, y) -> {
			return (x+y);
		}
		
		int result = f.cal(88, 5);
		System.out.println(result); // 93
	}
}
728x90

#. 내장 함수형 인터페이스

  • 내장 함수형 인터페이스는 java.util.function에서 import하여 사용할 수 있으며 아래 소개한 인터페이스 외 내용은 라이브러리 내 위 경로에서 직접 확인할 수 있습니다.

1. Function<T, R>

  • 추상 메서드 - R apply(T t)

  • T 타입으로 입력 받고 R 타입으로 결과를 리턴합니다.
public int functionTest() {
		Function<String, Integer> test = (String str) -> {
			return str.length();
		};
		
		int result = test.apply("안녕,Tester");
		System.out.println("test ===> " + result); // 9
		return result;
	}

2. Consumer<T>

  • 추상 메서드 - void accept(T t)

  • T 타입으로 단일 인수만 입력 받고 리턴하지 않습니다.
public void consumerTest() {
        Consumer<String> test = (String age) -> {
            System.out.println(age);
        };

        test.accept("25"); // 25
    }

3. Supplier<T>

  • 추상 메서드 - T get()

  • 인수를 입력 받지 않고 T 타입으로 결과를 리턴합니다.
public String supplierTest() {
		Supplier<String> test = () -> {
			return "테스트입니다.";
		};
		
		String result = test.get();
		System.out.println("test ====> " + result); // 테스트입니다
		return result;
	}

4. Predicate<T>

  • 메서드 - boolean test(T t)

  • T 타입으로 하나의 인수를 입력 받아 테스트하고 Boolean형으로 결과를 리턴합니다. 
public boolean predicateTest() {
		Predicate<String> test = (String str) -> {
			return str.isEmpty();
		};
		
		boolean result1 = test.test("");
		boolean result2 = test.test("test");
		
		System.out.println("test ====> " + result1); // true
		System.out.println("test ====> " + result2); // false
		
		return result1;
	}

5. BiFunction<T, U, R>

 

  • 추상 메서드 - R apply(T t, U u)

  • T와 U 타입으로 두개의 인수를 입력 받고 R 타입으로 결과를 리턴합니다.
public void bifunctionTest() {
		BiFunction<Integer, Integer, String> test = (t, u) -> {
			return t+u.toString();
		};
		
		String result = test.apply(58, 60);
		
		System.out.println("test ====> " + result); // 5860
	}

6. BinaryOperator<T>

 

  • 추상 메서드 - T apply(T t1, T t2)

  • T 타입의 두 인수를 입력 받고 T 타입으로 결과를 반환합니다.
public void binaryOperatorTest() {
	BinaryOperator<String> test = (a, b) -> {
		return a+b;
	};

	String result = test.apply("test", "입니다");
	System.out.println("test ====> " + result); // test입니다
}

7. UnaryOperator<T>

 

  • 추상 메서드 - T apply(T t)

  • T 타입으로 하나의 인수를 입력 받고 동일한 유형으로 결과를 반환합니다.
public void unaryOperatorTest() {
	UnaryOperator<String> test = t -> {
		return t.toUpperCase();
	};

	String result = test.apply("upper and lower");
	System.out.println("test ====> " + result); // UPPER AND LOWER
}

#. 추가적인 함수형 인터페이스 확인

 

 

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!

출처 및 참고 : https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
===========================================================

728x90