[Java] 비정형 인자 arguments
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"
요렇게 된다.
끗.