Overloading
클래스의 메소드를 정의할 때, 같은 이름이지만 서로 다른 매개변수의 형식을 갖고있는 메소드 여러개를 정의할 수 있는 방법
오버로딩 = 같은 이름 but 다른 메소드 시그니처
setOprands 메소드가 포함된 예제에서
매개변수를 2개 주는 경우 + 3개 주는 경우의 프로그램을 만들고 싶으면,
상위 클래스 바로 아래에 세번째 변수를 선언하고,
setOprands3 메소드를 생성 후 매개변수를 3개 넣어줌
그리고 sum()과 avg()메소드에 3번째 매개변수 값을 알맞게 넣어주면 돼
주의할 점은 avg는 세 값의 평균 = avg()메소드는 두 매개변수만 있으니 2로 나누면 되지만, 매개변수가 3개일 때는 3으로 나눠줘야하므로 avg3()메소드를 새로 선언한다.
✔ result
setOprands(10, 20)
30
15
10
setOprands(10, 20, 30)
60
20
setOprands2와 3은 두 메소드의 차이는 매개변수의 갯수, 동작은 똑같잖아(중복)
메소드의 중복 방지를 위해 super(매개변수) / super.메소드() 사용하는 것처럼
this.메소드()를 사용할거야
💡 우리가 중복 방지를 위해 사용했던 것들
✔ super(매개변수, 매개변수, ...);
자식클래스의 생성자가 부모클래스의 생성자와 같을 때, 매개변수의 수가 같음

✔ super.메소드();
자식클래스의 메소드가 부모클래스의 메소드의 return값이 같을 때

✔ this.메소드(매개변수, 매개변수, ...);
같은 클래스 안에서 다른 메소드와 같은 동작을 할 때, 매개변수의 수는 상관 없음

오버로딩 시, 오버라이딩과 같이 메소드의 시그니처는 중요해!
메소드의 시그니처 = 메소드의 이름 / 매개변수 타입, 수 / return값
특히 오버로딩의 경우, 메소드의 이름과 return값(반환값)은 같아야함~!!!! 매개변수는 달라야함
public class OverloadingDemo {
void A() {"void A()"}
// int A() {System.out.println("int A()")}
void A(int arg1) {System.out.println("void A(int arg1)")}
// void A(int param1) {System.out.println("void A(int param1)")}
void A(String arg1) {System.out.println("void A(String arg1)")}
public static void main(String[] args) {
OverloadingDemo od = new Overloading();
od.A(); // void A()
od.A(1); // void A(int arg1)
od.A("coding everybody"); // void A(String arg1)
}
}
✔ 같은 이름의 메소드 & 매개변수가 없는 A()메소드 but return값이 다름 (하나는 return값이 없고, 다른 하나는 return값이 int타입)
Err : od.A(); 호출될 때, 매개변수가 없고, A라는 이름의 메소드는 2개인데 차이점은 오직 return값의 차이.. 그럼 자바는 헷갈려 몰라
✔ 같은 이름의 메소드 & 매개변수 타입은 같으나, 이름은 다름 (return값도 같아)
다만, 같은 타입이지만 다른 이름의 매개변수 2개가 있음 → od.A(1); 호출할 때 자바가 arg1이라는 매개변수가 있는 메소드를 쓸지, param1 있는 메소드를 써야할지 몰라 Err가 발생 → 매개변수의 이름은 상관X
결론
⭐⭐⭐
오버라이딩 - 다른 클래스, 같은 이름의 메소드, 색다르게 수정된 기능 (상위클래스◁--하위클래스 상속, 시그니처 같음)
ride 타다
오버로딩 - 같은 클래스, 같은 이름의 메소드, 같은 기능 but 다른 매개변수 (메서드의 시그니처가 다름)
load 싣다
자식클래스에서 첫번째 메소드는 매개변수의 수만 바뀜 = overloading
두번째 메소드는 부모클래스에 이미 같은 이름의 메소드가 있고, 내용만 살짝 바뀌었어 = overloading