Java 메서드 오버로딩과 재귀 호출

코딩Java
읽는데 7분 소요
처음 쓰여진 날: 2026-02-17
마지막 수정일: 2026-02-17
조회수: 1

요약

Java 메서드 오버로딩(Overloading)의 개념과 재귀 호출(Recursion)을 알아봅니다. 같은 이름의 메서드가 매개변수 타입에 따라 다르게 호출되는 원리와, 오버로딩된 메서드 간 전환을 이해하여 정보처리기사 실기 문제를 풀어봅니다.

오버로딩 핵심 정리

개념설명예시
오버로딩같은 이름, 다른 매개변수의 메서드calc(int) vs calc(String)
호출 결정 기준전달하는 인자의 타입calc(5) -> calc(int) 호출
Integer.valueOf()문자열을 정수로 변환Integer.valueOf("5") -> 5
재귀 호출메서드가 자기 자신을 호출return calc(n-1) + calc(n-2)

메서드 오버로딩이란?

오버로딩(Overloading) 은 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 하여 여러 개 정의하는 것입니다.

쉽게 말하면, "같은 이름이지만 받는 것이 다르면 다른 메서드" 입니다.

java
코드 하이라이팅 중...

위 코드에서 calc(int value)calc(String str)는 이름은 같지만 매개변수 타입이 다릅니다. Java는 전달하는 인자의 타입에 따라 어떤 메서드를 호출할지 자동으로 결정합니다.

java
코드 하이라이팅 중...
메서드 오버로딩과 재귀 호출 개념
왼쪽: calc(int)와 calc(String)은 이름은 같지만 매개변수 타입이 다릅니다. 오른쪽: 재귀 호출로 calc(4)가 calc(3)과 calc(2)를 다시 호출합니다.

오버로딩 vs 오버라이딩

오버로딩과 오버라이딩은 이름이 비슷하지만 완전히 다른 개념입니다.

구분오버로딩 (Overloading)오버라이딩 (Overriding)
의미같은 이름의 메서드를 여러 개 정의부모 메서드를 자식이 재정의
매개변수다름 (타입 또는 개수)같음
클래스 관계같은 클래스 내에서도 가능부모-자식 간
결정 시점컴파일 시 (인자 타입 기준)실행 시 (실제 객체 기준)


Integer.valueOf()

Integer.valueOf()문자열을 정수로 변환하는 메서드입니다.

java
코드 하이라이팅 중...
입력결과설명
Integer.valueOf("5")5문자열 "5" -> 정수 5
Integer.valueOf("123")123문자열 "123" -> 정수 123
Integer.valueOf("0")0문자열 "0" -> 정수 0

재귀 호출이란?

재귀 호출(Recursion) 은 메서드가 자기 자신을 다시 호출하는 것입니다.

java
코드 하이라이팅 중...

재귀 호출에는 반드시 두 가지가 필요합니다.

요소설명위 코드에서
종료 조건더 이상 호출하지 않는 조건if (value <= 1) return value
재귀 호출자기 자신을 다시 호출calc(value - 1) + calc(value - 2)

종료 조건이 없으면 무한히 호출하다가 프로그램이 멈춥니다.

재귀 호출 추적 방법

재귀 호출은 작은 값부터 먼저 계산하면 쉽게 풀 수 있습니다.

java
코드 하이라이팅 중...
호출계산 과정결과
calc(0)0 <= 1이므로 0 반환0
calc(1)1 <= 1이므로 1 반환1
calc(2)calc(1) + calc(0) = 1 + 01
calc(3)calc(2) + calc(1) = 1 + 12
calc(4)calc(3) + calc(2) = 2 + 13
calc(5)calc(4) + calc(3) = 3 + 25

오버로딩 + 재귀: 메서드 전환

시험에서 가장 중요한 패턴은 오버로딩된 메서드 사이에서 전환이 일어나는 경우입니다.

java
코드 하이라이팅 중...

핵심: calc(String)에서 calc(int)로 전환

calc(String str) 메서드 안에서 calc(value - 1)을 호출할 때, valueint 타입입니다.

java
코드 하이라이팅 중...
코드인자 타입호출되는 메서드
calc("5")Stringcalc(String str)
calc(value - 1)intcalc(int value)
calc(value - 3)intcalc(int value)

calc(String)은 한 번만 호출되고, 그 안에서 calc(int)로 전환됩니다. 이후로는 calc(int) 메서드끼리만 재귀 호출합니다.



실전 예제: 문제 풀이 과정

25년 1회 기출문제와 동일한 구조로 단계별 풀이를 연습합니다.

java
코드 하이라이팅 중...

1단계: 메서드 구조 파악

메서드매개변수 타입종료 조건재귀 호출
calc(int value)intvalue <= 1이면 value 반환calc(value-1) + calc(value-2)
calc(String str)Stringvalue <= 1이면 value 반환calc(value-1) + calc(value-3)

2단계: calc("5") 실행 - String 메서드 진입

java
코드 하이라이팅 중...

calc(String str) 메서드 내부:

java
코드 하이라이팅 중...

3단계: calc(int) 재귀 추적

이제 calc(int) 메서드만 추적합니다. 작은 값부터 구합니다.

java
코드 하이라이팅 중...
호출계산 과정결과
calc(0)0 <= 1이므로 0 반환0
calc(1)1 <= 1이므로 1 반환1
calc(2)calc(1) + calc(0) = 1 + 01
calc(3)calc(2) + calc(1) = 1 + 12
calc(4)calc(3) + calc(2) = 2 + 13

4단계: 최종 결과

java
코드 하이라이팅 중...

전체 실행 흐름

text
코드 하이라이팅 중...

문제 풀이 전략

풀이 순서

  1. 메서드 구분: 같은 이름의 메서드가 여러 개면 매개변수 타입 확인
  2. 첫 호출 확인: 전달하는 인자 타입에 따라 어떤 메서드가 호출되는지 확인
  3. 메서드 전환 확인: 메서드 내부에서 다른 타입의 인자로 호출하면 다른 메서드로 전환
  4. 재귀 추적: 작은 값부터 계산하여 결과 도출

자주 하는 실수

실수올바른 이해
calc(value - 1)이 calc(String)을 호출한다고 생각value는 int이므로 calc(int) 호출
calc("5")에서 재귀가 계속 calc(String)이라고 생각Integer.valueOf() 이후 int로 전환
큰 값부터 계산하려고 함작은 값(0, 1)부터 순서대로 구하기

정보처리기사 실기 기출 문제