하나의 함수에서 매개변수를 동적으로 받을수 있는 방법
가변인자가 있기 전에는 함수명 하나로 매개변수를 다양하게 받기 위해 아래와 같이 오버로딩 방식을 사용하였다
public static void main(String[] args) {
varargs("A");
varargs("A", "B");
varargs("A", "B", "C");
varargs("A", "B", "C", "D"); //error
}
public static void varargs(String str1){
System.out.println(str1); //A
}
public static void varargs(String str1, String str2){
System.out.println(str1 + "," + str2); //A,B
}
public static void varargs(String str1, String str2, String str3){
System.out.println(str1 + "," + str2 + "," + str3); //A,B,C
}
varargs("A", "B", "C", "D") 와 같이 정의된 매개변수보다 많거나 적은 매개변수를 넘기면 에러가 발생하게 된다
이러한 경우 오버로딩되는 메소드가 무한정 늘어날 수 있으므로 가변인자를 사용해주면 좋다
가변인자 사용 예시)
public static void main(String[] args) {
varargs("A");
varargs("A", "B");
varargs("A", "B", "C");
}
public static void varargs(String... strings){
System.out.println(strings[0]);
System.out.println(Arrays.toString(strings));
for(String str : strings){
System.out.println(str);
}
}
결과)
A
[A]
A
A
[A, B]
A
B
A
[A, B, C]
A
B
C
가변인자는 컴파일시 배열로 처리되기 때문에 배열 접근이 가능하다