문제
다음 Java 코드의 출력 결과로 가장 적절한 것은?
Javapublic class Main { public static void main(String[] args) { System.out.println(calc("5")); } static int calc(int value) { if (value <= 1) return value; return calc(value - 1) + calc(value - 2); } static int calc(String str) { int value = Integer.valueOf(str); if (value <= 1) return value; return calc(value - 1) + calc(value - 3); } }
① 4 ② 5 ③ 7 ④ 8
정답
1번
해설
정답: 1. main에서는 문자열 인자를 전달하므로 calc(String)이 먼저 호출된다. calc("5")는 calc(4) + calc(2)를 계산하고, int 버전의 재귀 결과는 각각 3과 1이므로 합은 4이다.
오답 풀이
- 1번: 오버로딩 선택과 재귀 계산을 올바르게 반영했다.
- 2번: 일반 피보나치 F(5)와 혼동한 값이다.
- 3번: calc(5) int 버전 결과와 혼동한 값이다.
- 4번: 재귀 호출 범위를 과대 계산한 값이다.
보충 개념 Java 오버로딩은 컴파일 시점의 인자 타입에 따라 호출 메서드가 결정된다. 문자열 "5"는 calc(String)을 호출하고, 그 내부의 정수 연산 결과는 calc(int)를 호출한다.