가변 인수 (varvargs: Variable Arguments)
가변 인수(varargs : Variable Arguments)
가변 인수는 자바 5(jdk 1.5)에서 추가된 기능 입니다.
가변 인수는 메서드의 인수의 길이가 가변적일 수 있도록 하는 기능합니다.
메서드의 매개 변수를 선언할 때 사용하며 사용 방식은 아래의 형식을 가집니다.
1
2
3
4
5
//생략
public void methodName(Object... obj){
// 로직
}
//생략
매개 변수에서 Object... obj
부분이 가변 인수가 사용된 부분이며 이는 배열로써 사용할 수 있습니다.
이해를 위한 간단한 예시입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class VarargsExam {
@Test
public void main() {
varargsPrint("The", "World!!!!"); // 2개
varargsPrint("ORA", "ORA", "ORA", "ORA", "ORA", "ORA"); // 여러개
varargsPrint(); // 0개
}
public static void varargsPrint(String...str) {
for(String s : str) {
System.out.println(s);
}
}
}
위의 예제에서 varargsPrint()
메서드의 인자를 보면 String... str
을 사용하고 있으며 이 부분이 가변 인수가 사용된 부분입니다.
그리고 가변 인수로 받은 str
은 배열로써 사용되기 때문에 for문을 통해 사용하고 있음을 확인할 수 있습니다.
장점
위에서 예시로 들었던 메서드를 가변 인수를 사용하지 않고 구현하려면 개발자는 오버로딩으로 이를 처리해야합니다.
하지만 위의 예시에서 매개 변수의 길이는 얼마나될지 알 수 없습니다. 이런 상황에서 오버로딩으로 처리하려면 같은 이름의 인자 수가 다른 무수히 많은 메서드를 구현해야합니다.
이런 부분을 가변 인수를 사용하여 손쉽게 해결할 수 있습니다.
주의점
- 가변 인수는 반드시 변수들 중 뒤에 위치해야 합니다.
method(Object arg1, Object... args, Object arg3)
의 형태로는 사용할 수 없다는 말입니다.
이는 컴파일러가 가변 인수의 시작과 끝을 알 수 없기 때문이며 컴파일러 단계에서 부터 에러를 반환합니다. - 기본자료형은 사용할 수 없습니다. 기본자료형 ( int, boolean, double 등)은 가변 인수로 사용할 수 없습니다.
이 자료형을 가변 인수로 사용하려면 래퍼 클래스를 사용해야 합니다.(Integer, Boolean, Double 등)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.