// 코드 53-2 인수가 1개 이상이어야 하는 가변인수 메서드 - 잘못 구현한 예! (320쪽) staticintmin(int... args) { if (args.length == 0) thrownewIllegalArgumentException("인수가 1개 이상 필요합니다."); intmin= args[0]; for (inti=1; i < args.length; i++) if (args[i] < min) min = args[i]; return min; }
1 Exception in thread "main" java.lang.IllegalArgumentException: 인수가 1개 이상 필요합니다. at com.github.sejoung.codetest.methods.Varargs.min(Varargs.java:16) at com.github.sejoung.codetest.methods.Varargs.main(Varargs.java:40)
Process finished with exit code 1
위에 코드는 문제 점이 있다. 런타임에야 코드가 실패를 한다는것이다. 그리고 코드도 장황해진다.
// 코드 53-3 인수가 1개 이상이어야 할 때 가변인수를 제대로 사용하는 방법 (321쪽) staticintmin(int firstArg, int... remainingArgs) { intmin= firstArg; for (int arg : remainingArgs) if (arg < min) min = arg; return min; }
Error:(38, 28) java: method min in class com.github.sejoung.codetest.methods.Varargs cannot be applied to given types; required: int,int[] found: no arguments reason: actual and formal argument lists differ in length
위에 코드는 컴파일 타임에 실패를 하고 더 코드도 명료해진다. 위에 코드의 잘 활용된 예가 System.out.printf() 이다
1 2 3 4 5
public PrintStream printf(String format, Object ... args) { return format(format, args); }
대부분의 코드가 인자 3개를 호출하고 3개이상 인자를 호출하는 경우가 극소수일때 아래와 같은 코드처럼 사용하기도 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13
publicvoidfoo(){}
publicvoidfoo(int a1){}
publicvoidfoo(int a1, int a2){}
publicvoidfoo(int a1, int a2, int a3){}
publicvoidfoo(int a1, int a2, int a3, int... rest){}