염몽 개발일지
Published 2022. 4. 2. 19:04
Java. 오버로딩 (overloading) Study/Java
오버로딩

 

자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.

 

한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것'메서드 오버로딩' 또는 '오버로딩' 이라고 한다.

 

 

같은 이름의 메서드를 정의한다고 해서 무조건 오버로딩인 것은 아니다.

오버로딩이 성립되려면 아래와 같은 조건이 성립되어야 한다.

 

  1. 메서드 이름이 같아야한다.
  2. 매개변수 개수 또는 타입이 달라야 한다.
  3. 반환 타입은 관계없다.

이어서 아래의 코드도 오류가 난다.

<java />
public class Main { public void test(Test t) { Test.add(3, 3); } } class Test { static long add(int a, long b) { System.out.println("1"); return a + b; } static long add(long a, int b) { System.out.println("2"); return a + b; } }

메서드 이름도 같고, 타입도 다른데 왜 오류가 날까?

그 이유는 Test.add(3,3) 의 3의 타입이 어떤건지 모호하기 때문이다. (= 명확하지 않다.)

어떤 메서드를 골라야할지 컴파일을 할 수 없다.

 


 

오버로딩의 올바른 예

매개변수는 다르지만 같은 의미의 기능수행을 한다. (같은 작업)

 

<java />
package test; public class Main { public static void main(String[] args) { Test mm = new Test(); // int result = mm.add(3,3); // System.out.println("mm.add(3, 3) 결과:" + result); // 그래서 먼저 메서드가 호출된다. System.out.println("mm.add(3, 3) 결과:" + mm.add(3, 3)); // 위의 2문장을 합친 것이다. } } class Test { int add(int a, int b) { System.out.print("int add(int a, int b) - "); return a + b; } long add(long a, long b) { System.out.print("long add(long a, long b) - "); return a + b; } int add(int[] a) { System.out.print("int add(int[] a) -"); int result = 0; for (int i = 0; i < a.length; i++) { result += a[i]; } return result; } }

 

.출력 결과

<java />
int add(int a, int b) - mm.add(3, 3) 결과:6

출력결과를 보면 add메서드가 println 메서드보다 먼저 호출되는지 의아할 수 있다.

하지만 해당 코드의 위 주석 2줄을 생각하면 된다.

profile

염몽 개발일지

@염몽이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!