[Java] 기초 - 메서드 오버로딩

이지연·2025년 12월 17일

개요

아래의 내용은 java_grammer 레파지토리 C02MethodClass 디렉터리에 저장되어있는 내용을 정리하였다.


1. 메서드 오버로딩이란?

같은 이름의 메서드를 여러 개 만들 수 있는 기능으로, 코드의 가독성과 사용성을 크게 향상시켜준다

핵심 규칙:
같은 이름의 메서드를 선언할 수 없다.
, 매개변수의 개수 또는 타입이 다르면 허용된다.

// ❌ 불가능: 같은 이름 + 같은 매개변수
public static int sum(int a, int b) { }
public static int sum(int a, int b) { } // 컴파일 오류

// ✅ 가능: 매개변수 개수 다름
public static int sum(int a, int b) { }
public static int sum(int a, int b, int c) { }

// ✅ 가능: 매개변수 타입 다름
public static int sum(int a, int b) { }
public static int sum(double a, double b) { }

2. 오버로딩 메서드 호출

컴파일러는 호출 시 전달된 매개변수를 보고 가장 적합한 메서드를 자동 선택한다.

System.out.println(sum(10, 20));     // sum(int, int) 호출
System.out.println(sum(10, 20, 30)); // sum(int, int, int) 호출
System.out.println(sum(10.5, 20.5)); // sum(double, double) 호출

실행 결과:

30
60
31  // (10.5 + 20.5) = 31.0 → int 캐스팅

3. 실제 오버로딩 사례들

3-1. System.out.println() 오버로딩

가장 친숙한 예시다.

System.out.println("hello");  // println(String)
System.out.println(10);       // println(int)  
System.out.println(10.5);     // println(double)

println() 메서드는 수십 개의 오버로딩 버전이 존재한다.

3-2. ArrayList.add() 오버로딩

List<Integer> myList = new ArrayList<>();
myList.add(10);        // add(E e) - 요소 추가
myList.add(0, 20);     // add(int index, E e) - 특정 위치에 추가

4. 오버로딩 선택 기준 (컴파일러 판단 순서)

호출 시 컴파일러가 메서드를 선택하는 우선순위:

1. 정확히 일치하는 매개변수 타입 → 최고 우선
2. 자동 형변환 가능한 타입 (int → double)
3. 박싱/언박싱 (int → Integer)
4. 가변인자 (...)
sum(10, 20);       // 1순위: sum(int, int)
sum(10.0, 20);     // 2순위: sum(double, double) - int가 double로 자동변환

5. 오버로딩 vs 오버라이딩 구분

📍 오버로딩 (같은 클래스 내)
- 같은 메서드명
- 매개변수 다름
- 반환타입 상관없음

📍 오버라이딩 (상속 클래스 간)  
- 같은 메서드명 + 매개변수
- 반환타입 일치
- 접근권한 ↑ 가능

6. 실무 활용 예시

public class Calculator {
    // 기본 합계
    public int sum(int a, int b) {
        return a + b;
    }
    
    // 3개 합계
    public int sum(int a, int b, int c) {
        return a + b + c;
    }
    
    // 배열 합계
    public int sum(int[] numbers) {
        int total = 0;
        for(int n : numbers) total += n;
        return total;
    }
    
    // 사용
    sum(1, 2);           // 3
    sum(1, 2, 3);        // 6  
    sum(new int[]{1,2,3}); // 6
}

정리

특징설명
조건같은 이름 + 다른 매개변수(개수/타입)
장점코드 가독성 ↑, 사용 편의성 ↑
실제 사례println(), add(), Math.max() 등
주의반환타입만 다르면 오버로딩 불가

메서드 오버로딩은 자바 라이브러리 전반에 걸쳐 사용되는 핵심 기능이다.
println(), add(), format() 등 익숙한 메서드들이 모두 오버로딩으로 구현되어 있다.

profile
Eazy하게

0개의 댓글