문제
다음 Java 코드의 실행 결과를 쓰시오.
Javapublic class Main { static String process() { try { if (Math.random() > 0.5) { throw new RuntimeException(); } return "SUCCESS"; } catch (RuntimeException ex) { try { return "CAUGHT"; } finally { System.out.print("INNER"); } } finally { System.out.print("OUTER"); } } public static void main(String[] args) { // Math.random()이 항상 0.8을 반환한다고 가정 System.out.print(process()); } }
정답
INNEROUTERCAUGHT
INNEROUTERCAUGHT
해설
Math.random()이 0.8(>0.5)이므로 RuntimeException이 발생합니다. catch 블록에서 실행되는 중첩된 try-finally 구조의 실행 순서는 다음과 같습니다: 1) catch 블록 내부의 try에서 return "CAUGHT"가 결정되지만 즉시 반환되지 않음, 2) 내부 finally 블록이 먼저 실행되어 "INNER" 출력, 3) 외부 finally 블록이 실행되어 "OUTER" 출력, 4) 최종적으로 "CAUGHT"가 반환되어 출력됩니다. 따라서 "INNEROUTERCAUGHT"가 출력됩니다.