Varargs
자바 5.0에서 소개되는 기법중에서 가변인수(Varargs)라는 것이 있다. 가변인수라는 것은 필요에 따라 매개변수(인수)를 가변적으로 조정할 수 있는 기술이다. 가변인수가 없던 시절에는 가변인수 대신 컬렉션이나 배열을 이용해서 가변인수를 대체했었다.
가변인수(Varargs java 5.0)
필요에 따라 매개변수를 가변적으로 조정할 수 있는 기술.
컬렉션을 이용한 가변인수(method)
public class VarArgsMain{
public static void display(Vector v){
for(Object s : v){
System.out.println("컬렉션형태 : "+ s );
}
}
}
컬렉션을 이용한 가변인수(caller)
Vector vec = new Vector();
vec.add("hello");
vec.add("world");
vec.add("korea");
VarArgsMain.display(vec);
위의 예에서 Vector 에 데이터를 원하는 만큼 넣어서 메서드 내부로 전달 할 수 있다. 하지만 자바 5.0에서는 가변인수 기법을 이용하면 보다 쉽게 가변인수를 적용할 수 있다.
가변인수를 이용한 메서드
public class VarArgsMain{
public static void display(String... strs){
for(String s : strs){
System.out.println("가변인수형태 : "+ s);
}
}
}
가변인수를 이용한 메서드 호출
VarArgsMain.display("hello", "world", "korea");
TEST CODE
import java.util.ArrayList;
import java.util.List;
public class VarArgsTest {
public static void main(String[] args) {
List<String> argsArr = new ArrayList<String>();
argsArr.add("a");
argsArr.add("b");
argsArr.add("c");
//call list args
VarArgsTest.argsPrint(argsArr );
//call Varargs
VarArgsTest.argsPrint("a","b","c" );
}
static <T> void argsPrint(List<T> argsArr){
for(T t : argsArr){
System.out.println("List args : " + t.toString());
}
}
static void argsPrint(String... strs){
for(String s : strs){
System.out.println("Varargs : "+ s);
}
}
}
가변인수에서 컴파일러가 하는 일
매개변수를 배열로 변환한다
- 원본 : public static void display(String… strs)
- 변환 : public static void display(String strs[])
메서드 호출시 인자들을 이용해 배열로 만든다
- 원본 : VarArgsMain.display(“hello”, “world”, “korea”)
- 변환 : VarArgsMain.display(new String[]{“hello”, “world”, “korea”})