[Java] 메소드 오버로딩

aseol·2023년 10월 10일
0

메소드 오버로딩

하나의 클래스에 동일한 이름의 메소드를 여러 개 정의하는 것

*overload : 과적(過積)하다

조건

오버로딩이 성립하기 위한 조건 ?

  1. 메소드의 이름이 같다
  2. 매개변수의 개수 or 타입이 다르다


    ※ 반환 타입은 영향이 없다 !
int add(int a, int b) { return a+b; }
long add(int x, int y) { return long(x+y); }

위의 두 메소드는 반환 타입이 다르지만 매개변수 개수와 매개변수 타입이 동일하므로 
오버로딩이 성립하지 않는다.

∴ 컴파일시 에러 발생 ➡️ The method add(int x, int y) is already defined.

❔오버로딩의 올바른 예
매개변수는 다르지만 같은 의미의 기능을 수행하게 되는 경우 !

주의사항

case 1>
int add(int a, int b) { return a+b; }
long add(long a, int b) { return a+b; }

case 2>
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }

위와 같은 경우 모두 메소드 오버로딩이 성립한다(매개변수 타입이 다르므로).

그러나, 예를 들어

add(5, 5);

위와 같이 작성하여 호출한 경우 case 1의 경우에는 문제 없이 실행되는 반면 case 2에선 에러가 발생한다.

➡️ The method add(int, long) is ambiguous for the type ~ .

한마디로 무엇을 호출한 건지 모호하다고 에러를 던지는 것이다.
이와 같은 에러를 발생시키지 않기 위해서는 명확히 작성해 주어야 한다

add(5, 5L);
add(5L, 5);

0개의 댓글

관련 채용 정보