요약
•
인자의 개수가 일정하지 않을 때는 가변 인수를 사용하고, 가변 인수 앞 필수로 받아야 하는 매개변수를 추가하여 개수를 제한하자.
가변인수에서 인자의 개수를 제한하기
static int sum(int... args) {
int sum = 0;
for (int arg: args)
sum += arg;
return sum;
}
Java
복사
•
이런 메서드의 경우 sum(1, 2, 3)을 넣으면 6을 반환하고, sum()이면 0을 반환한다.
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;
}
Java
복사
•
이와 같이 받는 인자의 개수를 최소 1개 이상 받고 싶어 예외를 던지도록 코드를 작성하면. 오류 발생 시점이 컴파일 타임이 아닌 런타임 중에 발생하고 코드가 지저분해진다.
static int min(int firstArg, int... args) {
int min = firstArg;
for (int arg : args)
if (arg < min) min = arg;
return min;
}
Java
복사
•
이와 같이 매개변수를 가변인수를 포함해 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... rest) {}
Java
복사