가변인수는 신중히 사용하라

김종준·2023년 8월 2일
0

이펙티브자바

목록 보기
46/63

가변인수는 신중히 사용하라

가변인수 메서드는 명시한 타입의 인수를 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이라도 문제없이 해결 할 수 있다.

그런데 성능에 민감한 상황이라면 가변인수가 걸림돌이 될 수 있다.

가변인수 메서드는 호출될 대마다 배열을 새로 하나 할당하고 초기화한다는 것이다.

이는 메서드 오버라이드를 통해 가변인수를 인수로 받는 경우를 적절히 분리하면 해결할 수 있다.

0개의 댓글