학원/JAVA

9.30 13-5 Overloading

도원결의 2022. 9. 30. 23:50

 Overloading

하나의 클래스안에서 메소드를 중복정의해서 사용할 수 없다.

다만 밑의 조건이 있다면 하나의 클래스안에서 같은 이름의 메소드(=요리)를 여러개 정의 할 수 있다.
조건:
      1)매개변수(=양념) 개수가 다르거나
      2)개수가 같다면 매개변수 타입이 다르거나
      3)타입과 개수가 같다면 매개변수 순서가 달라야한다
 그러면 다 다른 메소드로 본다.

 이것을!!!!!!! 오버로딩이라고 한다! (나중에 배울 오버라이딩이랑 구별해야함!)

※단, 반환타입과는 전혀 관계가 없다.

 

public class Overloading {

int noOverloading(String str, Date date) {return 0;}
String noOverloading(String str1, Date date1) {return "";}
      반환타입이 달라도 이건 오버로딩이 아님!!  동일한 메소드임으로 중복정의 된 것 사용할 수 없다.

 

    [메소드 오버로딩 방법]

1.매개변수(=양념) 타입이 다르거나

 void paramTypeDiff(int param) {}
 void paramTypeDiff(float param) {}
 void paramTypeDiff(double param) {}

 2.매개변수의 개수가 다르거나
 void paramCountDiff() {}
 void paramCountDiff(int param) {}
 void paramCountDiff(int param ,int param2) {}
 3.타입과 개수가 같다면 매개변수 순서가 달라야한다
 void paramOrderDiff(int args1, float args2, double args3 ) {}
 void paramOrderDiff(float args2, double args3, int args1 ) {}
 void paramOrderDiff(double args3, int args1, float args2 ) {}

 

여기서 1번과 3번은 다르게 만들 수 있는 경우의수가 한정 되어있는 반면 2번의 조건 같은 경우 무한대로 만들 수 있겠음

만들다가 끝이 없겠어.... 그래서 나온 개념이 VarArgs!!!!!란 것 

 

 VarArgs이용하기
 static int getTotal (int ... args) {                    매개변수에 저렇게 선언 된 순간  arges는 배열이 된다!!   ( int [ ] args 요고!!! ) 그래서 이거 하나로 main에 있는 호출들 다 커버 가능함!  
System.out.println("args:"+args+",배열크기:"+args.length);
            int sum =0;
           for(int i=0; i<args.length; i++) sum+=args[i];  
               return sum;
 }

 

public static void main(String[] args) {

System.out.println(getTotal(10));                1개짜리 배열
System.out.println(getTotal(10,20));           2개짜리 배열
System.out.println(getTotal(10,20,30));      3개짜리 배열
System.out.println(getTotal());       

                        =>배열크기가 0인 배열, 메모리는 정해져 있지 않아서 변수를 담을 수 없어요

 

VarArgs가 없으면 매개변수의 개수가 다른 메소드들을 다 오버로딩해서 따로 메소드를 만들어야함

(메소드의수가 무한대로 늘어나는 것을 방지해준다.)