• 가변인수(varargs) 메소드는 명시한 타입의 인수를 0개 이상 받을 수 있다.
  • 가변인수 메소드를 호출하면 인수의 개수와 길이가 같은 배열을 만들고 인수들을 배열에 저장한다.
//입력받은 int 인수들의 합을 계산 해주는 가변인수 메소드

static int sum(int... args) {
    int sum = 0;
    for (int arg : args) {
        sum += arg;
    }
    return sum;
}
//인수가 1개 이상이어야 하는 가변인수 메소드 - 잘못 구현 한 예

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;

}
  • 이 메소드의 가장 큰 문제는 인수를 0개 넣었을 때 런타임시에 실패한다는 점

    (컴파일 때 잡아야 좋다)

  • args 유효성 검사를 명시적으로 해야하고 for-each문도 사용하기 힘들다.

//제대로 사용한 가변인수 메소드

static int min(int firstArg, in... remainingArgs) {
    int min = firstArg;
    for (int arg : remainingArgs) {
        if (arg < min)
            min = arg;
    }
    return min;
}
  • 가변인수는 인수 개수가 정해지지 않았을 때 유용하다.
  • 성능에 민감한 상황에는 가변인수가 걸림돌이 된다.
    • 가변인수 메소드는 호출될 때 마다 배열을 새로 하나 할당하고 초기화하기 때문이다.

+ Recent posts