- 메소드의 오버로딩은 메소드 시그니처에 있다.
※ 메소드 시그니처? 메소드의 선언부에 명시되는 매개변수의 리스트
- 만약, 두 개 이상의 메소드가 매개변수의 갯수와 타입 및 순서까지 모두 같다면, 메서드 시그니처가 동일하다 볼 수 있다.
[ Method Overloading 이란? ]
- 같은 이름의 메소드를 중복하여 정의하는 것을 의미한다.
- 원래 자바에서는 한 클래스 내에서 같은 이름의 메소드를 둘 이상 정의할 수없다.
- 하지만 매개변수의 갯수나 타입을 다르게 하면 같은 이름의 메소드를 정의할 수 있다.
- 메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나로, 다형성(polymorphism)을 구현하는 방법 중 하나이다.
[ 메소드 오버로딩의 대표적인 예 - println() ]
1. println()
2. println(boolean x)
3. println(char x)
4. println(char[] x)
5. println(double x)
6. println(float x)
7. println(int x)
8. println(long x)
9. println(Object x)
10. println(String x)
- println() 메소드는 전달받은 매개변수의 타입에 따라 위와 같은 다양한 메소드중에서 적절한 메소드를 호출하게 된다.
[ 메소드 오버로딩의 조건 ]
- 자바에서 메소드 오버로딩이 성립되기 위해서는 다음과 같은 조건을 만족하여야 한다.
1. 메소드의 이름이 같아야한다.
2. 메소드의 시그니처, 즉 매개변수 타입, 갯수가 달라야 한다.
- 메서드 오버로딩은 반환 타입과는 관계가 없다.
[ 오버로딩 예제 ]
- 컴파일러는 사용자가 오버로딩된 함수를 호출하는 경우, 같은 메서드 시그니처를 가지는 메소드를 찾아 호출한다.
void sum(int num1) { // 전달받은 num1을 그대로 출력.
System.out.print(num1);
}
void sum(int num1, num2) { // 전달받은 두 정수의 곲을 출력
System.out.print(num1 * num2);
}
void sum(int num1, double num2) { // 전달받은 정수와 실수의 합을 출력함.
System.out.print(num1 + num2);
}
// 메인 메소드
public static void main(String[] args) {
sum(10); // 매개변수 1개짜리 메소드 호출 결과 : 10
sum(10, 20); // int타입의 매개변수 2개짜리 메소드 호출 결과 : 200
sum(10, 3.14); // int타입의 매개변수 1개, double타입의 매개변수 1개짜리 메소드 호출 결과 : 13.14
sum(10, 'a'); // 매개변수 2개타입이 가진 메소드 모두 호출 가능. 결과 : 970
}
※ sum(10, 'a')가 의 경우, 인수로 int형 1개, char형 1개로 호출하는 함수인데, char형의 자료형은 int뿐만 아니라 double형 으로도 타입이 변환이 가능하다.
- 위 예제를 보듯이 어떠한 메소드를 호출해야할지 불명확한 경우, 컴파일 과정에서 문제는 없지만 명확하지 않은 호출은 허용하지 않는다.
- 그러므로 위 같은 경우, 더 작은 표현범위를 가진 int형으로 자동형변환이 이루어 지게 된다.
'#Java' 카테고리의 다른 글
| Java 클래스(Class) (0) | 2024.04.03 |
|---|---|
| 오버로딩(Overloding) vs 오버라이딩(Overriding) (0) | 2024.04.03 |
| 메소드의 오버라이딩 (Method Overriding) (0) | 2024.04.03 |
| 메소드(Method) (0) | 2024.04.02 |
| String Pool이란 무엇인가? (0) | 2024.04.02 |