같은 클래스 내에서 메서드를 선언할 때 서로 구분하기 위해 이름을 다르게 설정해야 한다. 같은 이름이라면 호출했을 때 어떤 것이 실행되어야 할지 알 수 없기 때문이다.
하지만!! 메서드 내에 매개변수가 달라 구별이 가능하다면 같은 이름을 사용할 수 있도록 허용해준다. 이렇게 같은 이름의 메서드를 정의하는 것을 오버로딩이라고 한다.
매개변수가 구별되기 위해서는 다음과 같은 조건이 충족되야 한다.
(반환타입은 전혀 상관이 없다.)
int mul(int x, int y) { return x * y; }
double mul(double x, double y) { return x * y; }
위 예시의 각 메서드는 mul로 이름이 같고, 매개변수의 개수가 같지만 매개변수의 타입이 각각 int, double로 구분이 되기 때문에 오버로딩이 가능하다.
double mul(long x, long y) { return x * y; }
long mul(long x, long y) { return x * y; } //오류 (오버로딩 불가)
위 예시는 반환타입만 다르고 매개변수 개수와 타입이 모두 같다.
이렇게 되면 오버로딩의 조건에 충족되지 않기 때문에 오류가 발생한다.
기억하자!!