... 가변인수(varargs)
이것도 J2SE 5.0에 새로 추가된 기능 중에 하나로 "임의 개수의 인수를 받을 때" 사용합니다.
5.0 이전에서 임의의 갯수의 인자를 넘겨주고 싶을 때는 배열을 만들어서 넘겨주고 받는 쪽에서도 배열로 받아야 했습니다.
@Test
public void passArray(){
int[] numbers1 = {1, 2, 3, 4, 5};
int[] numbers2 = foo(numbers1);
public void passArray(){
int[] numbers1 = {1, 2, 3, 4, 5};
int[] numbers2 = foo(numbers1);
assertTrue(Arrays.equals(numbers1, numbers2));
}
private int[] foo(int[] numbers){
return numbers;
}
5.0 부터는 넘겨줄 때 배열을 만들어서 넘기지 않아도 받을 때 알아서 배열로 받아주는(물론 배열을 넘겨도 됩니다.) 가변인수 라는 것이 생겼습니다. 모양은 쩜 세 개 ... 이것입니다.
@Test
public void primitiveVargs(){
int[] array1 = foo(1, 2, 3, 4, 5); //배열을 만들지 않아도 넘어갑니다.
int[] array2 = foo(array1); //배열을 넘겨도 넘어갑니다.
public void primitiveVargs(){
int[] array1 = foo(1, 2, 3, 4, 5); //배열을 만들지 않아도 넘어갑니다.
int[] array2 = foo(array1); //배열을 넘겨도 넘어갑니다.
assertTrue(Arrays.equals(array1, array2));
}
private int[] foo(int... numbers) { //가변인수를 사용했기 때문이지요.
return numbers;
}
private int[] foo(int... numbers) 이것과 private int[] foo(int[] numbers) 둘 다 존재하면 충돌이 일어납니다. 둘 중에 하나만 있어야 합니다. 가변인수도 일종의 배열이기 때문에 그런것 같습니다.