Skip to main content

Java 함수형 인터페이스 + 예외처리 + 람다

10번 문제

왜 이런걸내고그래.. 진짜..

public class Soojebi {

    // 함수형 인터페이스 선언
    static interface F {
        int apply(int x) throws Exception;
    }

    // run 메서드: f.apply 실행, 예외 발생 시 7 반환
    public static int run(F f) {
        try {
            return f.apply(3);
        } catch (Exception e) {
            return 7;
        }
    }

    public static void main(String[] args) {
        // 예외를 발생시키는 람다
        F f = (x) -> {
            if (x > 2) {
                throw new RuntimeException();
            }
            return x * 2;
        };

        // 정상 작동하는 람다
        F f2 = (n) -> n + 9;

        System.out.print(run(f) + run(f2));  // 출력: 7 + 12 = 19
    }
}
  • Fapply 메서드가 int 입력을 받아서 int 반환, Exception을 던질 수 있는 함수형 인터페이스
  • run 메서드는 F 타입 함수의 apply를 호출하고 예외가 나면 7을 리턴
  • f 람다는 입력이 3보다 크면 예외를 발생시키고, 아니면 두 배를 리턴
  • f2 람다는 입력에 9를 더하는 함수
  • main에서 두 run 호출 결과를 더해 출력

1. 함수형 인터페이스 정의

static interface F {
    int apply(int x) throws Exception;
}
  • F는 정수 하나 받아서 정수 반환하는 함수형 인터페이스
  • apply 메서드는 예외(Exception)를 던질 수도 있다.

2. run 메서드

public static int run(F f) {
    try {
        return f.apply(3);
    } catch (Exception e) {
        return 7;
    }
}
  • runF 타입의 함수 f를 받아서, f.apply(3)을 실행한다.
  • 만약 실행 중 예외가 발생하면 7을 반환한다.

3. main 함수 내부 람다식

F f = (x) -> {
    if (x > 2) {
        throw new RuntimeException();
    }
    return x * 2;
};
  • 입력 x가 2보다 큰가?
    → (true) 예외 발생
    → (false) 아니면 x의 두 배를 반환한다.

F f2 = (n) -> n + 9;
  • 이 람다는 그냥 입력값에 9를 더해서 반환하는 코드이다.

4. 실행 & 출력

System.out.print(run(f) + run(f2));
  • run(f)f.apply(3) 호출 → 3 > 2 조건 참 → 예외 발생 → run은 예외 잡고 7 반환
  • run(f2)f2.apply(3) 호출 → 3 + 9 = 12 반환
  • 둘 더하면 7 + 12 = 19

최종 답: 19