[Java] 비정형 인자 arguments

Published: by Creative Commons Licence

arguments란?

가변인자 arguments는 메서드 매개변수의 특수한 형태로, 배열처럼 다뤄지며 배열의 길이를 메서드 호출 시점에 결정한다. 사용하려면 변수 타입 뒤에 바로 온점 세 개...를 붙이면 된다.

// 선언
public void showArgs(int... args) {
    System.out.println(args[0]);
    System.out.println(args[1]);
}


// 호출 패턴
showArgs();
showArgs(null);
showArgs(1, 2, 3, 4);
showArgs(3);

호출하는 측에선 인자를 생략하거나, 타입이 일치하는(여기선 int) 쉼표로 구분되는 하나 이상의 인자를 전달하며 호출할 수 있다. 인자를 생략할 경우 가변인자의 길이는 0이 되니 주의할 것.

public void showArgs(int... args) {
    for (int i = 0; i < args.length; i++) {
        // 전달받은 인수의 개수만큼 배열의 길이가 결정되므로 그 만큼만 반복
        System.out.println(args[i]);
    }
}

향상된 반복문을 활용할 경우 다음과 같다:

public void showArgs(int... args) {
    for (int ns : args) {
        System.out.println(ns);
    }
}

example 1

class Args {
    public int multiply(int... args) {
        int result=1;
        for(int ns : args) {
            result = result * ns;
        }
        return result;
    }
}


Args a = new Args();
System.out.println(a.multiply(2, 2, 2, 2)); // 16

example 2

public static void main(String[] args) {
    m1(1, 2, 3); // 6
    m1(new int[] { 1, 2, 3, 4 }); // 10
}

public static int m1(int... args) {
    int sum = 0;
    for (int i = 0; i < args.length; i++) {
        sum += args[i];
    }
    return sum;
}

main 메서드의 arguments

public static void main(String[] args) { ... }

program arguments 라고 하며, java 프로그램 실행 시 입력받는 매개변수다.

예를 들어 다음과 같은 클래스가 있을 때:

public class MainTest {
    public static void main(String[] args) {
        System.out.println("args.length : " + args.length);

        if (args.length <= 0) {
            System.out.println("Incorrect usage");
            System.exit(0);
        }

        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "] = \""+ args[i] + "\"");
        }
    }
}

터미널에서 직접 실행해보면:

javac MainTest.java

java MainTest
Incorrect usage

java MainTest a 1 b c 3 4 d f
args length : 8
args[0] = "a"
args[1] = "1"
args[2] = "b"
args[3] = "c"
args[4] = "3"
args[5] = "4"
args[6] = "d"
args[7] = "f"

요렇게 된다.

끗.