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
}
}
F
는apply
메서드가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;
}
}
run
은F
타입의 함수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