오버로딩

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

'하다보면 되겠지 머.,. > 생활코딩_JAVA' 카테고리의 다른 글

패키지  (0) 2021.10.23
클래스 패스  (0) 2021.10.23
오버라이딩  (0) 2021.10.23
상속  (0) 2021.10.22
초기화와 생성자  (0) 2021.10.22