- 메소드의 오버로딩은 메소드 시그니처에 있다.

 ※ 메소드 시그니처? 메소드의 선언부에 명시되는 매개변수의 리스트

 - 만약, 두 개 이상의 메소드가 매개변수의 갯수와 타입 및 순서까지 모두 같다면, 메서드 시그니처가 동일하다 볼 수 있다.

 

[ 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형으로 자동형변환이 이루어 지게 된다.


[ 메서드(method)란 무엇인가? ]

'#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

+ Recent posts