[개발일지] 230602 Java Varargs(가변인자)란?

오늘 새로 배운 내용

 

Java Varargs (가변인자)


오늘은 Java 5부터 도입되었다는 Varargs (가변인자) 기능을 알게 되었다.

 

Varargs기능은 메서드의 매개변수로 동적인 개수의 인수를 전달할 수 있게 해주는 기능으로, 메서드가 동일한 타입의 인수를 다양하게 받을 수 있게 해 준다.

 

아래 예시 코드르 보면 이해가 편하다.

 

public void printNumbers(int... numbers) {
    for (int num : numbers) {
        System.out.println(num);
    }
}


printNumbers(1, 2, 3);     // 1, 2, 3을 인수로 전달
printNumbers(10, 20);      // 10, 20을 인수로 전달
printNumbers(100);         // 100을 인수로 전달

 

printNumbers() 메서드 선언에서 매개변수 타입 뒤에...로 선언해서 ('int... numbers') varargs를 사용할 수 있다.

 

메서드를 사용하는 곳에서는 int타입의 인자를 여러 개 전달할 수 있다. (ex. printNumbers(1, 2, 3))

 

Varargs 특징


  • 각 메서드에는 하나의 varargs 매개변수만 가질 수 있다.
  • varargs 인자는 마지막 매개변수여야 한다. 
prinNumbers(int... numbers, Long number)  -> x
prinNumbers(Long number, int... numbers)  -> O
  • 가변인자는 메서드 내부에서 인수의 개수를 동적으로 처리하는 유연성을 제공한다.

 

하지만 varargs는 메서드는 호출될 때마다 배열을 새로 하나 할당하고 초기화한다는 단점이 존재한다.

(애플리케이션 성능에 큰 영향을 미치는 수준은 아니지만 메서드가 자주 호출되고 메서드에 전달되는 인수의 수가 많을 경우, 배열이나 컬렉션을 미리 생성해서 전달하는 방식이 더 효율적일 수 있다.)