Varargs(가변인수)
JDK 5부터 도입된 기능으로 메서드 호출 시 넘기는 인자의 개수를 클라이언트가 유동적으로 조절할 수 있게 해주는 문법이다.
public static void main(String[] args) {
System.out.println(sum(1, 2, 3, 4, 5));
}
private static int sum(int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum;
}기본 동작 원리 및 특징
개발자가 Type... 문법을 사용하면 컴파일러는 이를 내부적으로 해당 타입의 배열로 변환하여 처리한다.
sum(1, 2, 3)호출컴파일러가
new int[]{1, 2, 3}배열 생성 코드로 변환내부에서는
int[] args배열로 메서드 실행
메서드 내부에서는 배열을 다루는 것과 동일하게 동작하며, 다음과 같은 특징이 있다.
호출 비용 발생
메서드가 호출될 때마다 새로운 배열을 할당하고 초기화하는 오버헤드가 있음
성능이 매우 중요한 루프 내에서는 사용을 지양하거나 최적화가 필요함
마지막 매개변수
가변인수 매개변수는 반드시 매개변수 리스트의 마지막에 위치해야 함
하나의 메서드에 여러 개의 가변인수 매개변수를 둘 수 없음
주의사항
오버로딩 모호성
컴파일러가 어떤 메서드를 호출해야 할지 판단하기 어려워 모호성 에러가 발생하거나, 의도와 다르게 동작할 수 있다.
private static int sum(int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum;
}
// 인자가 3개인 경우 호출되지만, 모호함이 발생
private static int sum(int a, int b, int c) {
return a + b + c;
}
// 컴파일 에러 발생, Ambiguous method call.
private static int sum(int a, int b, int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum + a + b;
}
Last updated
Was this helpful?