private static List<Integer> getNumbers(int... numbers) {
return Arrays.stream(numbers)
.boxed()
.collect(Collectors.toUnmodifiableList());
}
메서드의 매개변수의 개수를 유동적으로 지정하는 형식
기존 자바에서 메서드의 매개변수 개수가 고정적이였으나 jdk1.5부터 동적으로 지정해 줄 수 있다.
가변 인자는 타입 변수명과 같은 형식으로 선언하며, PrintStream클래스의 printf()가 대표적인 예이다.
public PrintStream printf(String format, Object... args) { ... }
위와 같이 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다. 그렇지 않으면, 컴파일 에러가 발생한다. 가변인자인지 아닌지를 구별할 방법이 없기 때문에 허용하지 않는 것이다.
쉽게 말하면, 내부적으로 배열을 생성해놓고 내부적으로 배열을 이용하는 것이다. 하지만 이렇게 되면 호출될 때마다 계속 생성되는 것이다
String concatenate (String s1, String s2) { ... }
String concatenate (String s1, String s2, String s3) { ... }
String concatenate (String s1, String s2, String s3, String s4) { ... }
-> String concatenate (String... str) { ... }