java arbitrary number of arguments(...함수매개변수)

tips java의 함수에는 일반적으로 동일한 자료형의 여러개 데이터를 인자로 받을 때, 배열을 인자로 사용 할 수 있다. 하지만 arbitrary number of arguments(... 함수인자)를 사용할 경우 함수는 배열보다도 유연하게 인자를 받을 수 있다.

1
int sum(int ... values){...};

위와 같은 자료형 ... 매개변수명 형태로 함수의 인자를 선언 할 수 있다. 예제를 보면 쉽게 이해가 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//int형의 파라미터가 몇개가 넘어올지 모를 경우, 대응 할 수 있는 ... 확장된 배열형태의 매개변수 형태
static int sum(int ... values){
int total = 0;
//배열로 인자에 접근 할 수 있다.
for(int i =0; i < values.length; i++){
total += values[i];
}// for
return total;
}// sum

public static void main(String [] args){

//인자를 아예 안받을 수도 있다.
System.out.println(sum()); // 결과: 0

//인자를 하나만 받을 수 있다.
System.out.println(sum(1)); // 결과: 1

//물론 3개도 된다.
System.out.println(sum(1, 2, 3)); // 결과: 6

//배열로도 받을 수 있다.
System.out.println(sum(new int[] {1, 2, 3, 4})); // 결과: 10

int[] values = {1,2,3,4,5};
System.out.println(sum(values)); // 결과: 15

}

함수를 선언 할때 **동일한 형태의 자료형의 인자가 0개 또는 n가 예상 되거나, 또는 배열형태의 인자가 예상될 경우 **함수 오버로딩을 대신하여 위의 arbitrary number of arguments 사용하면 편 할 것 같다.

다만 주의 할 점은 arbitrary number of arguments(... 함수인자)를 사용한 경우 해당 함수는 다른 인자는 갖을 수 없다.

1
2
3
int sum(int ... values, int b){...};  // 컴파일 오류

int sum(int ... values, String b){...}; // 컴파일 오류