본문 바로가기

코딩/Java

자바 - 매개변수의 개수가 동적인 함수 선언 방법 (varargs 가변인수)

반응형
public class Example {
    public static void main(String[] args) {
        System.out.println(add(1, 2));       // 3
        System.out.println(add(1, 2, 3));    // 6
    }

    public static int add(int a, int b) {
        return a + b;
    }

    public static int add(int a, int b, int c) {
        return a + b + c;
    }
}

자바에서 이미 정의한 함수를 오버로딩하여 매개변수 개수가 다른 함수를 선언이 가능하다.

예제에서 정의된 add() 함수는 매개변수가 2개 혹은 3개인 정수를 받을 수 있다.

 

하지만 매개변수 4개를 허용하는 add() 함수가 필요하면 또 오버로딩을 하여 선언해야 한다.

필요한 매개변수마다 오버로딩한 함수를 작성해야 하니 매개변수 개수가 동적이지는 못하다.

 

 

매개변수 개수가 동적일 원할 경우, 자바의 varargs (가변인수) 기능을 활용하면 매개변수를 2개를 받을 수도 있고 100개도 받을 수 있는 함수를 작성할 수 있다.

 

varargs 활용 예시

public class Example {
    public static void main(String[] args) {
        System.out.println(add(1, 2));       // 3
        System.out.println(add(1, 2, 3));    // 6
        System.out.println(add(1, 2, 3, 4)); // 10
    }

    public static int add(int... numbers) {
        int total = 0;

        for (int number : numbers)
            total += number;

        return total;
    }
}

매개변수의 타입 옆에 ...을 붙여 해당 매개변수의 개수가 동적임을 나타낸다 (매개변수 개수가 0개 이상).

add() 함수 속, numbers이라는 매개변수는 int[] 타입이다 (정수 배열 타입).

varargs 매개변수와 반복문을 활용해 add() 함수는 매개변수가 몇 개이든 상관없이 모든 매개변수의 값들을 더한 값을 반환한다.

 

 

varargs 주의 점 1: varargs 매개변수는 맨 오른쪽 마지막에 선언해야 한다

public class Example {
    public static void main(String[] args) {
        System.out.println(add(1, 2, "hello"));
    }

    public static int add(int... numbers, String str) { // Example.java:6: error: varargs parameter must be the last parameter
        int total = 0;

        for (int number : numbers)
            total += number;

        return total;
    }
}

기존numbers 매개변수 오른쪽에 새로운 str 매개변수를 추가하고 실행했다.

실행했더니 에러에서 varargs 매개변수가 반드시 마지막 매개변수이어야 한다 라고 명시되어 있다.

 

(int... numbers, String str)는 문법적으로 틀리고

(String str, int... numbers)가 문법적으로 맞다.

 

varargs 주의 점 2: 함수에 varargs 매개변수는 한 개만 존재할 수 있다

public class Example {
    public static void main(String[] args) {
        System.out.println(add(1, 2, "hello", "world"));
    }

    public static int add(int... numbers, String... str) { // Example.java:6: error: varargs parameter must be the last parameter
        int total = 0;

        for (int number : numbers)
            total += number;

        return total;
    }
}

varargs 매개변수 2개를 선언하고 실행했더니, 위에 예시와 동일하게 varargs 매개변수가 반드시 마지막 매개변수이어야한다 라고 에러가 난다.

매개변수 두 개가 같이 마지막 매개변수가 될 수 없으니, varargs 매개변수는 한 개만 존재가 가능하다.

반응형