[오버로딩이란?]
같은 이름의 메서드를 매개변수(parameter)의 "구조"를 다르게 해서 여러 개 정의하는 것
오버로딩이란 한줄로 요약하자면 "같은 이름, 다른 모양"이라고 할 수 있다
System.out.println("Hello");
System.out.println(123);
System.out.println(3.14);
위 println은 보면 문자열도 되고, 숫자도 되고, 실수도 모두 표기할 수 있다.
이게 마로 메서드 오버로딩의 기능이다.
[오버로딩을 이해해 보자]
void print(int a)
void print(int a, int b)
void print(String s)
void print(double d)
위 코드를 보자.
동일한 print메서드에 다양한 매개변수를 주고 있다.
메서드 오버로딩은 같은 메서드에 매개변수를 다르게 사용하는 것을 의미한다.
[오버로딩이 되는 경우와 안 되는경우는 무엇일까?]
📝 오버로딩이 되는 경우
1. 매개변수 개수가 다를 때
void add(int a)
void add(int a, int b)
2. 매개변수의 타입이 다를 때
void add(int a, double b)
void add(double a, int b)
add(10, 20); // ❌ 애매함 (컴파일 에러)
3. 매개변수의 순서가 다를 때
void add(int a, double b)
void add(double a, int b)
📝 오버로딩이 안 되는 경우
1. 리턴 타입만 다른 경우
int add(int a, int b)
double add(int a, int b) // 컴파일 에러
자바는 메서드를 호출할 때 리턴 타입을 보지 않는다.
호출시점에서 구분 불가하기 때문에 에러가 발생할 수 있다.
[자바는 어떻게 오버로딩 메서드를 고르는가?]
add(10, 20);
add라는 메서드를 자바가 가지고 있다. 이 때 자바 내부에서는 다음과 같은 흐름을 가지게 된다.
1. add라는 이름의 메서드를 전부 찾기
2. (int, int) 매개변수와 정확히 일치하는게 있나?
➡️ 존재한다면 실행
3. 없으면 자동 형 변환 가능한 메서느가 있는가?
➡️ 존재한다면 실행
4. 없으면 컴파일 에러
이러한 흐름으로 메서드를 분석하기 때문에 아래와 같은 경우가 생긴다.
void add(double a, double b)
add(10, 20); // OK (int → double 자동 형변환)
void add(int a, double b)
void add(double a, int b)
add(10, 20); // ❌ 애매함 (컴파일 에러)
add메서드가 두개 존재할 때 어느 메서드를 호출하는 지 정확하지 않기 때문에 에러가 난다.
'Java' 카테고리의 다른 글
| [Java] 생성자(Constructor)에 대해 알아보자 (0) | 2026.01.14 |
|---|---|
| [Java] main은 왜 static이 붙을까? (0) | 2026.01.13 |
| [Java] Garbage Collector에 대해 알아보자 (0) | 2026.01.04 |
| [Java] 단위 테스트와 통합 테스트의 차이점과 장단점 (0) | 2026.01.02 |
| [Java] AutoWired는 무엇이며 왜 사용하지 않는가 (0) | 2025.12.30 |