9.30 13-5 Overloading
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가 없으면 매개변수의 개수가 다른 메소드들을 다 오버로딩해서 따로 메소드를 만들어야함
(메소드의수가 무한대로 늘어나는 것을 방지해준다.)