자바의 varargs(가변인자)는 메서드를 정의할 때, 동적인 개수의 인자를 전달할 수 있는 기능입니다.
varargs를 사용하면 메서드를 호출할 때 필요한 개수의 인자를 전달할 수 있으며, 메서드 내부에서는 배열로 처리됩니다.
varargs는 JDK 5부터 도입되었으며, 메서드의 파라미터 선언에서 타입 뒤에 "..." 기호를 붙여 사용합니다.
예를 들어, 다음과 같이 메서드를 선언할 수 있습니다
public void printValues(String... values) {
// 메서드 내용
}
위의 예시에서 values는 String 타입의 varargs입니다. 이제 printValues 메서드를 호출할 때, 인자로 0개 이상의 String 값을 전달할 수 있습니다.
printValues("Hello", "World"); //아큐먼트 2개 전달 // 참조변수를 만들어 줌.
printValues("Java");
printValues();
varargs를 사용하는 메서드 내부에서는 values를 배열로 처리합니다. 따라서 values는 String 배열로 취급되며, 메서드 내부에서는 일반 배열처럼 다룰 수 있습니다.
public void printValues(String... values) {
for (String value : values) {
System.out.println(value);
}
}
위의 예시는 values 배열의 요소를 하나씩 출력하는 메서드입니다. 호출할 때 전달한 인자들이 배열 형태로 values에 저장되어 for-each 루프를 통해 접근할 수 있습니다.
또 다른 예시로, varargs와 일반 파라미터를 함께 사용할 수도 있습니다. 이때는 varargs 파라미터가 마지막에 위치해야 합니다.
public void printValues(String prefix, String... values) {
for (String value : values) {
System.out.println(prefix + value);
}
}
위의 예시에서는 prefix라는 일반 파라미터와 values라는 varargs를 함께 사용하고 있습니다. 이렇게 호출할 때 일반 파라미터와 varargs를 조합하여 사용할 수 있습니다.
varargs는 메서드 선언 시 편의성과 유연성을 제공하는 강력한 기능입니다. 호출하는 측에서 필요한 개수의 인자를 전달할 수 있으며, 메서드 내부에서 배열로 처리하여 다양한 작업을 수행할 수 있습니다.
가변인자를 사용한 예시들입니다.
public int calculateSum(int... numbers) {
int sum = 0;
for (int num : numbers) {
sum += num;
}
return sum;
}
public String concatenateStrings(String... strings) {
StringBuilder sb = new StringBuilder();
for (String str : strings) {
sb.append(str);
}
return sb.toString();
}
public void printInfo(String name, int... scores) { //Primitive 타입 , 가변 파라미터 타입
System.out.println("Name: " + name);
System.out.print("Scores: ");
for (int score : scores) {
System.out.print(score + " ");
}
System.out.println();
}
public int findMax(int... numbers) {
int max = Integer.MIN_VALUE;
for (int num : numbers) {
if (num > max) {
max = num;
}
}
return max;
}
public void initializeArray(int... elements) {
int[] array = new int[elements.length];
for (int i = 0; i < elements.length; i++) {
array[i] = elements[i];
}
System.out.println("Initialized array: " + Arrays.toString(array));
}
public String concatenateStrings(String delimiter, String... strings) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strings.length; i++) {
sb.append(strings[i]);
if (i < strings.length - 1) {
sb.append(delimiter);
}
}
return sb.toString();
}