자바에서 함수형 인터페이스는 단일 추상 메서드(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 블록에서 예외를 처리할 수 있습니다. 이렇게 함수형 인터페이스를 사용하여 예외 처리를 간편하게 할 수 있습니다.
함수형 인터페이스를 사용하면 예외 처리를 간결하게 할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다. 하지만 가독성을 위해서 예외 처리가 필요한 부분에 주석을 달아주는 것이 좋습니다.
참고 자료: