Varargs(가변인자)는 JDK 5에서 새로 도입된 기능으로 매개변수의 수를 가변적으로 조절할 수 있게 해주는 기능이다.
사용법
파라미터를 여러개 정의하고 싶은 메소드를 선언할 때, 매개변수 부분에 …을 추가하면 된다.
public int calculateSum(int... numbers) {
return IntStream.of(numbers).sum();
}
Java
복사
IntSream.of을 태우는 것을 보면 알 수 있듯이 numbers는 우리의 예상과는 달리 메소드 내에서 리스트를 반환한다.
컴파일 시에 Object[]가 만들어지고 varargs에 할당된 인자들이 배열의 원소가 된다.
•
다음은 위 코드의 바이트 코드다.
public static varargs calculateSum([I)I
L0
LINENUMBER 21 L0
ALOAD 0
INVOKESTATIC java/util/Arrays.stream ([I)Ljava/util/stream/IntStream;
INVOKEINTERFACE java/util/stream/IntStream.sum ()I (itf)
IRETURN
L1
LOCALVARIABLE numbers [I L0 L1 0
MAXSTACK = 1
MAXLOCALS = 1
Java
복사
: 바이트 코드 단계에서 해석해보면 [I로 인자를 받고 있는 것을 확인할 수 있다. 즉 0개 이상의 배열 객체로 매개변수를 처리한다.
: 실제로 numbers의 타입을 분석해봐도 int[]로 표시된다.
장점
위의 메소드에서 varargs를 사용하지 않을 경우, 우리는 calculateSum() 메서드를 각 매개변수 갯수 별로 오버로딩해야 했을 것이다.
public int calculateSum(int number1, int number2) {
return number1 + number2;
}
public int calculateSum(int number1, int number2, int number3) {
return number1 + number2 + number3;
}
...
Java
복사