자바는 오버로딩이라는 기능이 구현되어 있어서 매개변수의 개수와 타입이 달라도 같은 이름의 메소드명으로 동일 기능을 구현 할 수 있습니다.
<aside> ❗ 오버로딩의 조건
그래서 매개변수의 타입이 달라도 하나의 메소드명으로 오버로딩 할 수 있고 또 매개변수의 개수가 달라도 역시 오버로딩 가능합니다.
여기서 드는 생각이 만약 매개변수의 개수가 사용자의 쓰임에 따라 달라진다면? 또 그 수가 무한이 늘어난다면??
일일이 매개변수 하나하나 오버로딩 해주어야 할 것인가? 라는 의문이 생기게 되죠.
String divide(String s1, String s2){...}
String divide(String s1, String s2, String s3){...}
String divide(String s1, String s2, String s3, String s4){...}
String divide(String s1, String s2, String s3, String s4, String s5){...}
다행히도 JDK1.5부터 매개변수의 개수를 동적으로 지정해 줄 수 있게 되었는데 이 기능을 **가변 인자(variable argument)**라고 합니다.
가변 인자가 없었던 전 버전에서는 매개변수로 컬렉션이나 배열을 사용 했었습니다.
public static void main(String args[]) {
Varargs v = new Varargs();
Vector<String> ve = new Vector<String>();
ve.add("a");
ve.add("b");
v.sum(ve);
}
void sum(Vector<String> v) {
for(Object a: v)
System.out.println(a);
}
public static void main(String args[]) {
Varargs v = new Varargs();
String [] s = {"a", "b", "c"};
v.sum(s);
}
void sum(String [] str) {
for(String a:str)
System.out.println(a);
}
이 같은 경우 따로 백터 객체를 만드는 등 조금 복잡하고 v.sum()과 같이 인자를 생략해 줄 수 없습니다.
키워드 ... 을 사용합니다.
void sum(String...str) {
for(String a:str)
System.out.println(a);
}