Search
Duplicate
🌋

Varargs

태그
개념
정의
상위 항목
하위 항목
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
복사