static int sum(int... args) {
int sum = 0;
for (int arg : args)
sum += arg;
return sum;
}
sum(1, 2, 3)
잘못된 구현
static int min(int... args) {
if (args.length == 0)
throw new IllegalArgumentException("인수가 1개 이상 필요합니다.");
int min = args[0];
for (int i = 1; i < args.length; i++)
if (args[i] < min)
min = args[i];
return min;
}
Integer.MAX_VALUE
로 설정하지 않고는 더 명료한 for-each문도 사용할 수 없음적절한 구현
static int min(int firstArgs, int... remainingArgs) {
int min = firstArg;
for (int arg : remainingArgs)
if (arg < min)
min = arg;
return min;
}
매개변수를 2개 받음
→ 첫 번째로는 일반 인수를 받고, 두번째 인수로 가변인수를 받으면 문제를 해결할 수 있음
가변인수 메서드는 호출될 때마다 배열을 새로 할당하고 초기화함
성능에 민감한 상황에서는 다중정의를 사용하자
public void foo() {}
public void foo(int a1) {}
public void foo(int a1, int a2) {}
public void foo(int a1, int a2, int a3) {}
public void foo(int a1, int a2, int a3 int... args) {}
→ 메서드 호출의 95%가 인수를 3개 이하로 사용한다면 5개를 다중정의해볼 수 있음
→ 메서드 호출 중 5%만이 배열을 생성하게 됨 (마지막 메서드 사용)