[java] 함수형 인터페이스를 사용하여 동작 파라미터화를 구현하는 방법은 어떻게 되나요?
  1. 먼저, 함수형 인터페이스를 정의합니다. 함수형 인터페이스는 하나의 추상 메서드만을 가지고 있는 인터페이스입니다. 예를 들면, Function<T, R> 인터페이스는 입력값 타입 T를 받아서 결과값 타입 R을 반환하는 함수를 표현합니다.

  2. 동작 파라미터화를 구현할 메서드에서, 함수형 인터페이스를 매개변수로 받습니다. 이렇게 함으로써 메서드가 다양한 동작을 수행할 수 있도록 합니다.

  3. 메서드 내에서 함수형 인터페이스를 사용하여 동작을 수행합니다. 이때, 람다 표현식을 사용하면 간결하고 가독성 있는 코드를 작성할 수 있습니다.

예를 들어, 아래의 코드는 리스트를 필터링하여 전달한 조건에 맞는 요소만 남기는 메서드입니다.

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
        List<T> filteredList = new ArrayList<>();
        for (T element : list) {
            if (predicate.test(element)) {
                filteredList.add(element);
            }
        }
        return filteredList;
    }

    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);
        Predicate<Integer> evenPredicate = number -> number % 2 == 0;
        List<Integer> evenNumbers = filter(numbers, evenPredicate);
        System.out.println(evenNumbers); // [2, 4]
    }
}

위의 예제에서 filter 메서드는 List<T>Predicate<T>를 매개변수로 받습니다. Predicate<T>는 함수형 인터페이스로, test 메서드를 사용하여 요소를 조건에 따라 판별합니다. 이를 통해 filter 메서드는 조건에 맞는 요소만을 담은 새로운 리스트를 반환합니다.

함수형 인터페이스를 사용하여 동작 파라미터화를 구현하면 코드의 재사용성과 유지보수성이 향상되며, 더욱 유연하고 간결한 코드를 작성할 수 있습니다.