자바 5 가변인수(varargs)

자바 5에 추가된 가변인자(Varargs)에 대해 설명합니다.

이것도 J2SE 5.0에 새로 추가된 기능 중에 하나로 “임의 개수의 인수를 받을 때” 사용합니다.

5.0  이전에서 임의의 갯수의 인자를 넘겨주고 싶을 때는  배열을 만들어서 넘겨주고 받는 쪽에서도 배열로 받아야 했습니다.

   @Test
   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);         //배열을 넘겨도 넘어갑니다.

       assertTrue(Arrays.equals(array1, array2));
   }

   private int[] foo(int… numbers) {    //가변인수를 사용했기 때문이지요.
       return numbers;
   }

private int[] foo(int… numbers) 이것과 private int[] foo(int[] numbers) 둘 다 존재하면 충돌이 일어납니다. 둘 중에 하나만 있어야 합니다. 가변인수도 일종의 배열이기 때문에 그런것 같습니다.