가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다.
그런데 받아야 하는 인수가 1개 이상이어야 하면 어떨까?
아마 아래와 같이 예외처리를 할 가능성이 크다.
static int min(int ...args) {
if(args.length == 0) {
throw new IllegalArgumentException("인수는 1개 이상");
}
...
}
하지만 이 방식에는 몇가지 문제가 있다.
만약에 인수를 0개만 넣어 호출하면 런타임에 실패한다는 것이다.
그럼 이를 해결할 다른 방법은 없을까?
매개변수를 2개 받도록 하면된다.
static int min(int firstArg, int.. remainingArgs) {
int min = firstArg;
for(int arg : remainingArgs) {
...
}
...
}
위와 같이 코드를 수정하면 가변인수의 수가 0이라도 문제없이 해결 할 수 있다.
그런데 성능에 민감한 상황이라면 가변인수가 걸림돌이 될 수 있다.
가변인수 메서드는 호출될 대마다 배열을 새로 하나 할당하고 초기화한다는 것이다.
이는 메서드 오버라이드를 통해 가변인수를 인수로 받는 경우를 적절히 분리하면 해결할 수 있다.