[java] 함수형 인터페이스를 사용하여 예외 처리를 간편하게 하는 방법은 어떻게 되나요?

자바에서 함수형 인터페이스는 단일 추상 메서드(single abstract method)를 가진 인터페이스입니다. 이러한 인터페이스를 사용하면 람다 식이나 메서드 참조를 사용하여 간결하고 유연한 코드를 작성할 수 있습니다.

예외 처리가 필요한 경우, 동일한 시그니처를 가지는 예외를 처리하는 함수형 인터페이스를 정의할 수 있습니다. 이를테면, CheckedFunction<T, R>라는 함수형 인터페이스를 정의하여 T 타입의 인자를 받아서 R 타입을 반환하는 함수를 래핑하여 예외 처리를 간편하게 할 수 있습니다.

아래는 CheckedFunction<T, R> 인터페이스의 예입니다.

@FunctionalInterface
public interface CheckedFunction<T, R> {
    R apply(T t) throws Exception;
}

이제 CheckedFunction 인터페이스를 사용하여 예외 처리를 간편하게 할 수 있습니다. 예를 들어, 파일에서 숫자를 읽어와서 제곱한 값을 반환하는 함수를 만든다고 가정해봅시다.

public class Example {
    public static void main(String[] args) {
        CheckedFunction<String, Integer> readAndSquare = (filePath) -> {
            int num = 0;
            try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
                String line = br.readLine();
                num = Integer.parseInt(line);
            } 
            return num * num;
        };

        try {
            int result = readAndSquare.apply("input.txt");
            System.out.println("Result: " + result);
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

위의 예제에서 주목해야 할 부분은 CheckedFunction의 apply 메서드 구현 내에 IOException이 발생할 수 있는 FileReader와 BufferedReader를 사용한다는 것입니다. apply 메서드에서 예외를 처리하지 않고 던지도록 했습니다.

따라서, readAndSquare.apply(“input.txt”)를 호출할 때 IOException이 발생한다면, 람다 식을 호출한 main 메서드에서 catch 블록에서 예외를 처리할 수 있습니다. 이렇게 함수형 인터페이스를 사용하여 예외 처리를 간편하게 할 수 있습니다.

함수형 인터페이스를 사용하면 예외 처리를 간결하게 할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 하지만 가독성을 위해서 예외 처리가 필요한 부분에 주석을 달아주는 것이 좋습니다.

참고 자료: