Java

[Java] 가변 인자 (varargs)

비번변경 2021. 10. 16. 15:17

가변 인자 (Variable argument)

매개변수의 개수를 동적으로 지정하는 기능

JDK 1.5부터 추가되었으며, printf()가 가변 인자를 사용한 대표적인 메서드라고 할 수 있다.

가변 인자 기능이 없던 JDK 1.4 이하의 버전에서는 컬렉션 또는 배열을 이용해 여러 개의 인수를 처리했다.

 

컬렉션/베열 사용 예시

import java.util.Vector;

public class main {
    public static void main(String args[]) {
        String[] str = {"a", "b", "c"};
        Vector<String> v = new Vector<String>();
        v.add("A");
        v.add("B");
        v.add("C");

        print_val(str);
        print_val(v);
    }

    static void print_val(String args[]) { // 배열 사용
        for (String item : args)
            System.out.print(item + " ");
        System.out.println();
    }

    static void print_val(Vector<String> v) { // 컬렉션 사용
        for (String item : v)
            System.out.print(item + " ");
        System.out.println();
    }
}

 

가변 인자 사용

매개변수 정의 시 ...을 사용한다.

가변인자 외의 다른 매개변수가 있다면, 가변 인자는 마지막에 선언해야 한다.

하나의 클래스 내에 가변인자를 사용한 메서드를 오버로딩하는 것은 권하지 않는다. 컴파일러가 어떤 메소드를 사용해야 하는지 구분하지 못하기 때문에 컴파일 에러가 발생한다. 아래 코드에서는 코드를 한꺼번에 볼 수 있도록 하기 위해 오버로딩했다.

public class main {
    public static void main(String args[]) {
        print_val();
        print_val("a", "B", "c");

    }

    static void print_val(String... str){
        for (String s:str)
            System.out.print(s + " ");
        System.out.println();
    }
    
    static void print_val(int a, String... str){
        System.out.println(a);
        for (String s:str)
            System.out.print(s + " ");
        System.out.println();
    }
}

 

실행 결과

 

가변 인자 사용

가변 인자를 사용하면 함수 호출 시 매개변수 값을 생략할 수 있다.

 

 

추가로, 가변인자 기능은 내부적으로 배열을 생성해서 사용하는 것 같다. 동시 정의 시, 

 

가변 인자와 배열

같은 함수가 정의되어 있다는 메시지가 발생한다.